如何将按钮并排放置。我使用gridBagLayout来设计布局。问题是按钮彼此相距太远。我试图选择CENTER作为锚,但这会使按钮重叠。如果我使用WEST和EAST,按钮放置得太远了。
e.g。保存---------- NEW PATTERN而不是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);
答案 0 :(得分:1)
GridBagLayout是最复杂的布局。如果您只是对齐几个按钮,我建议使用FlowLayout(默认值)或BoxLayout。但是,如果要使用GridBagLayout,而不是调整锚点,请将第二个按钮的gridx调整为1。另外,不确定为什么你有一个3的网格而不是0的网格(除非你有其他代码省略了使用0-2的网格)。
答案 1 :(得分:1)
感谢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);
....
答案 2 :(得分:0)
为什么不在发布新问题之前先阅读旧帖子?
您在上次发帖中获得了Swing教程的链接。因此,请阅读教程,尝试示例并使用适当的布局管理器或布局管理器组合来完成工作。
答案 3 :(得分:0)
而不是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);
答案 4 :(得分:0)
我建议您阅读GridBagLayout的教程,因为它是开箱即用的最先进的布局管理器,并使其他布局管理器过时。由于这些原因,值得学习。如果你把它想象成一个网格,它就会使一切变得简单,那么你必须得到的就是x和y坐标,这是你在代码中错过的。你几乎就在那里:)
混合布局管理器通常是一个非常糟糕的主意,因为在填充额外空间的容器时它们的工作方式略有不同。
@camickr 根据我的评论,人们应该使用GridBagLayout,因为它是最灵活的,可以在任何情况下使用。只有一个应该导致简单和可维护的可能。我也发现它很容易阅读,因为它是逻辑映射的。只有对所有组件使用一个约束对象时,约束才会改变,这显然是个坏主意。
答案 5 :(得分:0)
此代码将按钮并排放置在屏幕中央。
关键是:
constraints.fill = GridBagConstraints.NONE; - >让这些按钮不要扩展
constraints.insets.right = 0; - >使按钮并排放置
constraints.insets.left = 0; - >使按钮并排放置
constraints.weightx = 1 - >使按钮水平展开的单元格
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);
}