我怎样才能使通过一侧的按钮位置侧。我用了一个GridBagLayout的设计布局。问题是按钮的地方太彼此远离。我曾尝试选择中心锚但这使得按钮重叠。如果我用西,东,按钮彼此太远放置。

e.g。 SAVE ----------新格局代替SAVE NEW_PATTERN。

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
有帮助吗?

解决方案

感谢AKF,我已经通过将所述的FlowLayout GridBagLayout的内解决了这个问题。

....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern); 
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
m.setConstraints(pContainer, con);
c.add(pContainer);
....

其他提示

的GridBagLayout是最复杂的布局。如果你只是对准了两个按钮,我会建议使用的FlowLayout(默认值)或BoxLayout的。但是,如果你想使用GridBagLayout的,而不是调整锚,调整为gridx为1第二个按钮。此外,不知道为什么你具有3一gridy代替0 gridy(除非有你已经省略,它使用的0-2 gridy其他代码)。

你为什么不先发布新问题前仔细阅读您的旧帖子?

您确定在您的贴子最后给出的链接Swing指南。所以,阅读教程,请尝试的例子,并使用布局管理器的适当布局管理器或组合的工作。

相反GridBagLayout的,GridLayout是一个简单的解决方案。这是很容易设置:

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);

编辑:

只是出于好奇,我与你原来的打打闹闹,发现一个组合允许仅使用的GridBagLayout的。它是不是比你原来很大的不同:

GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;                   
con.gridwidth = 1; 
con.gridheight = 1;          
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);

此代码由宅院侧面的按钮边在屏幕的中心。

的关键是:

constraints.fill = GridBagConstraints.NONE; - >使butons不扩大

constraints.insets.right = 0; - >使得按钮并列

constraints.insets.left = 0; - >使得按钮并列

constraints.weightx = 1 - >使得在细胞至极的按钮水平EXPANDO

constraints.anchor = GridBagConstraints.EAST; - >使得左键站在小区的

constraints.anchor = GridBagConstraints.WEST; - >使得右按钮放置在该单元的左

public static void main(String args[]){
        JFrame frame=new JFrame();
        Container cont=frame.getContentPane();
        cont.setLayout(new GridBagLayout());

        GridBagConstraints constraints=new GridBagConstraints();
        constraints.insets.top=2;
        constraints.insets.bottom=2;
        constraints.insets.left=0;// increment to separate buttons
        constraints.insets.right=0;// increment to separate buttons
        constraints.fill=GridBagConstraints.NONE;
        constraints.weightx=1;
        constraints.gridy=0;

        constraints.anchor=GridBagConstraints.EAST;
        constraints.gridx=0;
        cont.add(new JButton("Save"),constraints);

        constraints.anchor=GridBagConstraints.WEST;
        constraints.gridx=1;
        cont.add(new JButton("New Pattern"),constraints);

        frame.pack();
        frame.setVisible(true);
    }

我建议你阅读GridBagLayout的教程,因为它是开箱即用最先进的布局管理器,使其他的人已经过时了。这是非常值得学习的原因。它使一切简单,如果你认为它是一个网格,你必须有正确则是X和Y坐标,这是你在你的代码错过了什么。你几乎有:)

混合布局管理器通常是一个非常糟糕的主意,因为他们所有的工作稍有不同,当谈到有额外的空间填写集装箱。

@camickr 根据我的评论的人应该用GridBagLayout的,因为它是最灵活的,可以在任何情况下使用。只有一个应导致简单和维护的可能。我也觉得很容易读,因为它是逻辑映射。如果你使用一个约束对象为所有组件,这显然是一个坏主意的contstraints只改变。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top