Intentando usar GUI, teniendo problemas para agregar botones y etiquetas

La asignación es simple, todo lo que tenemos que hacer es hacer que el código cree una ventana con un panel rojo con un solo botón y etiqueta. Aquí está el código hasta ahora, así como la clase de probador. Tengo la etiqueta para mostrar en la ventana, pero está en un lugar extraño. No puedo hacer que el botón se muestre, así como que el fondo se muestre en rojo.

Aquí es donde tengo más problemas:

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MyCustomFrame extends JFrame
{
    public MyCustomFrame()
    {
        createComponents();
        setSize(FRAME_WIDTH, FRAME_HEIGHT);

    }

private void createComponents()
    {
        JPanel panel=new createPanel();
        button=new JButton("Push Me");
        label=new JLabel("This is a label");
        add(button);
        add(label);
    }

private JButton button;
private JLabel label;
final int FRAME_WIDTH = 800;
final int FRAME_HEIGHT = 800;

public void createPanel()
    {
        JPanel panel=new JPanel();
        panel.setBackground(Color.RED);
        //button=new JButton("Push Me");
        //label=new JLabel("This is a label");

    }
public void createFrame()
    {
        JFrame frame=new JFrame();
        add(frame);
        frame.setVisible(true);
    }

}

Y esta es la clase de probador:

import javax.swing.JFrame;

public class MyCustomFrameViewer
{
   public static void main(String[] args)
   {
      MyCustomFrame frame = new MyCustomFrame();
      frame.setTitle("My first frame");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}  
Respuesta 1

Agregue el panel al marco en lugar de la etiqueta y el botón, y agregue la etiqueta y el botón al panel ...

private void createComponents()
{
    JPanel panel=new createPanel();
    add(panel);
    button=new JButton("Push Me");
    label=new JLabel("This is a label");
    panel.add(button);
    panel.add(label);
}

También puede echar un vistazo a los subprocesos iniciales y asegurarse de que está creando su interfaz de usuario desde el contexto del subproceso de envío de eventos

Algunas notas al margen ...

Esto me da miedo ...

public void createFrame()
{
    JFrame frame=new JFrame();
    add(frame);
    frame.setVisible(true);
}

Estás tratando de agregar un marco a un marco, que es una operación ilegal en Swing, pero afortunadamente, en realidad no lo estás llamando por lo que puedo ver.

En lugar de usar setSize(FRAME_WIDTH, FRAME_HEIGHT);, es posible que desee usar packen su lugar.

Respuesta: 2

Usted crea el panel JPanel, pero no le agrega nada, y luego nunca agrega el panel a su JFrame. Debe agregar sus componentes al panel JPanel y luego agregar el objeto del panel a su JFrame.

Tenga en cuenta que un JPanel usa FlowLayout de forma predeterminada, por lo que aceptará más fácilmente varios otros componentes sin métodos especiales de adición. El contentPane de JFrame usa BorderLayout, que es un poco más complicado de usar.

Respuesta: 3

Estoy tratando de desactivar la exposición automática, el enfoque automático y el balance de blancos automático en la muestra Camera2Basic de Google. Aquí está mi código: private void disableAutomatics () {try {mPreviewRequestBuilder ....

Estoy usando apache poi versión 4.0.0 y estoy tratando de hacer muchos grupos de columnas como la imagen a continuación: No sé si es posible usar poi. He intentado con el método XSSFSHeet.groupColumn () ...

Esto es algo con lo que me encontré tratando de resolver la pregunta de otra persona aquí, en una versión simplificada. El Cliente y el Servidor con dependencia reflexiva (circular) usan genéricos para tratar de mantenerse fuertemente tipados ...

¿Cómo puedo eliminar elementos negativos de una matriz sin hacer una copia de ella? / Mover la posición de la matriz. Digamos, por ejemplo, si el usuario llenó la matriz, ¿qué método podría usar para simplemente devolver ...