2011-01-14 12 views
7

Algo no está bien aquí. Estoy intentando que el botón de la derecha (etiquetado como "ayuda" en el ejemplo a continuación) se alinee a la derecha con el JFrame, y que los botones grandes tengan su ancho vinculado al JFrame, pero que sean al menos 180 píxeles cada uno. Obtuve la gran restricción de botón para trabajar, pero no la alineación correcta.miglayout: no se puede alinear correctamente al trabajo

alt text

pensé que la alineación correcta se logra mediante gapbefore push (como en this other SO question), pero no puedo entenderlo.

¿Alguien me puede ayudar?

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import net.miginfocom.swing.MigLayout; 

public class RightAlignQuestion { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("right align question"); 
     JPanel mainPanel = new JPanel(); 
     frame.setContentPane(mainPanel); 

     mainPanel.setLayout(new MigLayout("insets 0", "[grow]", "")); 

     JPanel topPanel = new JPanel(); 
     topPanel.setLayout(new MigLayout("", "[][][][]", "")); 
     for (int i = 0; i < 3; ++i) 
      topPanel.add(new JButton("button"+i), ""); 
     topPanel.add(new JButton("help"), "gapbefore push, wrap"); 
     topPanel.add(new JButton("big button"), "span 3, grow"); 

     JPanel bottomPanel = new JPanel(); 
     bottomPanel.setLayout(new MigLayout("", 
       "[180:180:,grow][180:180:,grow]","100:")); 
     bottomPanel.add(new JButton("tweedledee"), "grow"); 
     bottomPanel.add(new JButton("tweedledum"), "grow"); 

     mainPanel.add(topPanel, "grow, wrap"); 
     mainPanel.add(bottomPanel, "grow"); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

No sé lo suficiente sobre MigLayout para responder a esto, pero intente poner un borde en topPanel para asegurarse de que en realidad es tan ancho como la ventana. Si no es así, eso explicaría por qué la Ayuda no está alineada a la derecha. –

Respuesta

7

No importa, lo tengo: parece que no es necesario que haya una restricción brecha en la especificación de la columna, no a nivel de componentes:

topPanel.setLayout(new MigLayout("", "[][][]push[]", "")); 
+0

Lo hice en mi propia aplicación con un "span, gapleft push" – Rayne

+0

'panel.add (botón," celda 2 0, gapleft push ");' hice el truco para mí. Recuerde que esto se hace solo cuando agrega el componente. – FaithReaper

3

una manera mucho más fácil/más limpio (IMOH) está usando restricciones de componentes y haciendo

topPanel.add (nuevo JButton ("ayuda"), "push, al right, wrap");

Push empujará la celda hacia afuera a medida que se estira la ventana, pero debe decirle al componente que se una a la derecha de la celda. Usted podría lograr lo anterior con el siguiente código.

JPanel topPanel = new JPanel(); 
    frame.setContentPane(topPanel); 

    for (int i = 0; i < 3; ++i) 
     topPanel.add(new JButton("button"+i), ""); 
    topPanel.add(new JButton("help"), "push, al right, wrap"); 


    topPanel.add(new JButton("big button"), "span 3, grow, wrap"); 

    topPanel.add(new JButton("tweedledee"), "span, split2,grow, w 180, h 100"); 
    topPanel.add(new JButton("tweedledum"), "w 180, h 100, grow"); 
Cuestiones relacionadas