2011-01-14 66 views
7

某些事情不对。我试图让最右边的按钮(在下面的例子中标记为“帮助”)与JFrame右对齐,并且巨大的按钮的宽度与JFrame绑定,但每个按钮至少为180px。我得到了巨大的按钮约束条件,但不是正确的对齐方式。miglayout:无法正确对齐工作

alt text

我想右对齐被gapbefore push完成(如在this other SO question),但我不能弄明白。

任何人都可以帮助我吗?

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

我不太了解MigLayout来回答这个问题,但可以尝试在topPanel上放置一个边框以确保其实际上与窗口一样宽。如果不是这样,这就可以解释为什么帮助不是正确的。 – 2011-01-14 16:50:59

回答

7

没关系,我知道了:看起来像有需要在列规范中的一个缺口的约束,而不是在组件级:

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

我在我自己的应用程序中使用“span,gapleft push” – Rayne 2011-03-23 16:56:27

3

一个更容易/清洁的方式(IMOH)正在使用组件约束和做

topPanel.add(新的JButton(“帮助”),“推,右,包装”);

当窗口拉伸时,Push会推出单元格,但您需要告诉组件将自己绑定到单元格的右侧。您可以使用以下代码来实现上述目标。

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