Tengo un JPanel que no es parte de un JFrame. Por diversas razones, tengo que llamar a la pintura del panel método a través de mi propio método de «actualización».

Este es mi código:

public void onLoad ()
{
    panel = new JPanel ();
    panel.setBounds (0,0,Main.WIDTH,Main.HEIGHT);

    panel.setLayout (new BoxLayout (panel, BoxLayout.Y_AXIS));

    addButton ("button1", panel);
    addButton ("button2", panel);
}

private void addButton (String text, Container container)
{
    JButton button = new JButton (text);
    button.setPreferredSize (new Dimension (100,20));
    button.setAlignmentX (Component.CENTER_ALIGNMENT);
    container.add (button);
}

public void onRender (Graphics2D g)
{
    panel.paint (g);
}

Esto sólo pinta el color de fondo del panel. Si yo en el botón agregar.setBounds(…) en el addButton método, a continuación, se hace la pintura de los botones pero no se ve afectado por el BoxLayout.

Así que los botones se ven afectados por el BoxLayout obviamente. Yo no soy tan inteligente sobre cómo exactamente Swing funciona así que no estoy seguro de cómo hacer esto. JFrame tiene un pack() método que creo que es lo que necesito pero algunos equivalente para JPanels desde JPanels no tiene ese método.

  • Está usted usando la clase JApplet? Creo que los componentes Swing no se visualicen correctamente en los regulares de los Applets.
InformationsquelleAutor hesselbom | 2010-11-18

1 Comentario

  1. 3

    No sé lo que usted está buscando, pero para mí esto funciona bien.

    import java.awt.Component;
    import java.awt.Dimension;
    import javax.swing.BoxLayout;
    import javax.swing.JApplet;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class TestApplet extends JApplet{
        public static void main(String[] args){
            new TestApplet();
        }
        public TestApplet(){
            this.setSize(400,400);
            this.add(getCustPanel());
            this.setVisible(true);
        }
        private JPanel getCustPanel() {
            JPanel panel = new JPanel ();
            panel.setLayout (new BoxLayout(panel, BoxLayout.Y_AXIS));
            addButton ("button1", panel);
            addButton ("button2", panel);
            return panel;
        }
        private void addButton (String text, JPanel container)
        {
            JButton button = new JButton (text);
            button.setPreferredSize (new Dimension(100,20));
            button.setAlignmentX (Component.CENTER_ALIGNMENT);
            container.add (button);
        }
    
    }

    JPanel diseño en el applet

    • Gracias. Yo estaba tratando de pintar el panel sin necesidad de conectarlo a la applet. Yo estaba buscando la forma en la que el panel de «paquetes» de los botones para establecer la correcta límites. No pude encontrar cómo así que he hecho una solución en el código para agregar el panel para el applet, por lo que se «pack» correctamente, como en el ejemplo.

Dejar respuesta

Please enter your comment!
Please enter your name here