2011-01-14 4 views
7

Qualcosa non è giusto qui. Sto cercando di ottenere il pulsante più a destra (etichettato "help" nell'esempio qui sotto) per essere allineato a destra alla JFrame, e gli enormi pulsanti per avere la loro larghezza legata alla JFrame ma almeno di 180 pixel ciascuno. Ho avuto l'enorme vincolo del pulsante per funzionare, ma non il giusto allineamento.miglayout: non è possibile ottenere il corretto allineamento per funzionare

alt text

ho pensato che il corretto allineamento è stato realizzato da gapbefore push (come in this other SO question), ma non riesco a capirlo.

Qualcuno può aiutarmi?

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

Non so abbastanza su MigLayout per rispondere a questo, ma prova a mettere un bordo su topPanel per assicurarti che sia effettivamente largo quanto la finestra. Se non lo è, ciò spiegherebbe perché Help non è allineato a destra. –

risposta

7

Non importa, ho capito: sembra che ci deve essere un vincolo lacuna nelle specifiche della colonna, non a livello di componente:

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

L'ho fatto nella mia applicazione con una "span, spinga di gap" – Rayne

+0

'panel.add (pulsante," cella 2 0, spaziatura spaziatura ");' ha fatto il trucco per me. Ricorda che questo viene fatto solo quando aggiungi il componente. – FaithReaper

3

un modo molto più semplice/pulito (Imoh) sta usando i vincoli dei componenti e sta facendo

topPanel.add (nuovo JButton ("help"), "push, al right, wrap");

Push spinge la cella fuori mentre la finestra si allunga ma è necessario dire al componente di legarsi alla destra della cella. È possibile ottenere quanto sopra con il seguente codice.

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");