Necesito una ayuda para la localización de un JPanel en una posición específica en un Jframe.

Tengo un JPanel en una clase que extiende JFrame, y tengo que poner este JPanel en una determinada posición x,y.

Es algo como esto:

public class Frame extends JFrame {

    public Frame(){

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocation(250, 250);
        this.setSize(300,300);
        this.setVisible(true);

        JPanel panel = new JPanel();
        this.add(panel);
        panel.setLocation(150, 150);
        panel.add(new JButton("Hello!")); //just to show JPanel

    }//Frame()
}//Frame

No necesito un LayoutManager para la posición de la JPanel, porque tengo que poner ese JPanel en una posición específica (como 150,150 de ejemplo).
Pero si hago panel.setLocation(150,150) como en el código anterior, no pasa nada, y JPanel permanecer en el norte-centro de la imagen (también si puedo cambiar x,y el número en lugar de 150,150).

Y se muestra como este:

http://i.imgur.com/Te3z0kv.png

  • Para el posicionamiento absoluto, es necesario utilizar un null administrador de diseño. Para obtener más información, consulte Hacer Sin un Gestor de Diseño (Posicionamiento Absoluto).
  • Gracias! Esto es lo que yo quería! 😀
  • posicionamiento absoluto no se recomienda como medida de mis conocimientos
InformationsquelleAutor alecarnevale | 2013-11-25

3 Comentarios

  1. 3

    Del marco del panel de contenido, el gestor de diseño por defecto es un BorderLayout (NWSE+C). Hacer:

    this.getContentPanel().setLayout(null);
    • crear contenedores con posición absoluta contenedores pueden causar problemas si la ventana que contiene el recipiente que la contiene. docs.oracle.com/javase/tutorial/uiswing/layout/none.html
    • necesidad de poner ese JPanel en una posición específica (como 150,150 de ejemplo). – eso no es razón para utilizar un valor nulo de diseño. Codificar los valores es una idea tonta. Hay formas mejores de hacer esto. Por ejemplo poner un EmptyBorder de todo el panel. Cualquiera que sugiera que el uso de un null diseño realmente deservies un voto. El uso de una nula disposición a causar muchos problemas, especialmente para el principiante a los programadores que no entiendo es cómo Swing obras.
    • ok gracias! Pero en mi caso que tengo que hacer .setResizable(false), de manera absolutamente posicionado es posible whitout problemas 🙂
    • NO es la solución adecuada. Me dio una mejor alternativa. Aprender a tomar ventaja de Swing. Usando el gestor de diseño es una característica de gran alcance, ya sea que utilice el cambio de tamaño o no.
  2. 2

    utilizando setBounds(new Rectangle(96, 67, 98, 41));
    usted puede hacer esto…
    acabo de ver el ejemplo

    /**
     * This method initializes this
     *
     * @return void
     */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }
    
    /**
     * This method initializes jContentPane
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getLoginButton(), null);
        }
        return jContentPane;
    }

    }

  3. 0

    Un JFrame que utiliza el objeto borderlayout manager por defecto y JPanels uso framelayout administrador por defecto.
    Si desea utilizar el posicionamiento absoluto, entonces usted DEBE utilizar null su estructura, ya que cualquier otro gestor de diseño se utiliza setLocation() y setSize() métodos de acuerdo a sus propios estados de ánimo, y no según cómo quieras.

    Resumen: el Uso de setLayout(null) y el uso de null administrador y, a continuación, utilizar setBounds(X,Y,ancho,alto) método.

    • -1 esta mal suggestionwas hizo 20 minutos antes. No es necesario saturar el foro con duplicados sugerencias.

Dejar respuesta

Please enter your comment!
Please enter your name here