es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo agregar un JPanel a JFrame

Soy bastante nuevo en swing, así que no estoy seguro de cómo funciona esto. Estoy tratando de agregar un JPanel a un JFrame. Solo para tener una idea de los conceptos básicos, estoy imprimiendo una línea horizontal y el texto “Hola Mundo” encima.

import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;

public class GUI extends JFrame{

public GUI() {
    setTitle("Frame");
    setSize(500, 500);
    setBackground(Color.black);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setResizable(false);    
}
public void paint(Graphics g) {
    g.setColor(Color.GREEN);
    g.drawLine(0, 250, 500, 250);
}

public static void main(String[] args) {
    GUI g = new GUI();
    JPanel panel = new JPanel();
    JLabel label = new JLabel();
    panel.setSize(500, 500);
    panel.setBackground(Color.black);
    label.setText("Hola Mundo");
    label.setForeground(Color.green);
    panel.add(label);
    g.add(panel);

}

}

Por alguna razón, no puedo hacer que el JPanel se muestre.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay un par de errores en el código que impiden que el JPanel se muestre correctamente:

    1. El método setVisible(true) debería ser llamado después de agregar el panel al JFrame, no antes.
    2. El método setSize() debería ser llamado en el JFrame, no en el JPanel.

    Aquí está el código corregido:

    import javax.swing.*;
    import java.awt.Color;
    import java.awt.Graphics;
    
    public class GUI extends JFrame{
    
        public GUI() {
            setTitle("Frame");
            setSize(500, 500);
            setBackground(Color.black);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setResizable(false);
    
            JPanel panel = new JPanel();
            JLabel label = new JLabel();
            label.setText("Hola Mundo");
            label.setForeground(Color.green);
            panel.add(label);
    
            add(panel); // agregar panel al JFrame
            setVisible(true); // hacer visible el JFrame después de agregar el panel
        }
    
        public void paint(Graphics g) {
            super.paint(g);
            g.setColor(Color.GREEN);
            g.drawLine(0, 250, 500, 250);
        }
    
        public static void main(String[] args) {
            GUI g = new GUI();
        }
    
    }
    

    Nota que el método paint() ha sido modificado para llamar a super.paint(g) primero, para asegurar que el JFrame se pinte correctamente antes de dibujar la línea.

Comments are closed.