使用GridBagLayout做了一个面板,结果如下:发现问题,最下面的两个按钮大小不一致,如果我想大小一致并居中如何处理啊?部分代码如下:
public class AddRoom extends JDialog implements ActionListener { HomeCadGui parentJFrame;
JButton okButton, cancelButton; public AddRoom(HomeCadGui mainFrame) {
super(mainFrame, "Add a new room", true);
this.parentJFrame = mainFrame; Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(5, 5, 5, 5); JLabel title = new JLabel("请输入room信息,多个字段使用,分割");
title.setAlignmentY(Label.RIGHT);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.gridwidth=2;
pane.add(title, c);
JLabel name0 = new JLabel("添加坐标:", JLabel.RIGHT);
name0.setAlignmentY(Label.RIGHT);
c.gridwidth=1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 1;
pane.add(name0, c); JTextField jtf0 = new JTextField(parentJFrame.getSelectX() + ","
+ parentJFrame.getSelectY(), 8);
jtf0.setAlignmentY(LEFT_ALIGNMENT);
jtf0.setBorder(BorderFactory.createLineBorder(Color.red, 1));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 1;
pane.add(jtf0, c); JLabel name = new JLabel("Room's name:", JLabel.RIGHT);
name.setAlignmentY(Label.RIGHT);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 2;
pane.add(name, c); JTextField name1 = new JTextField(16);
name1.setAlignmentY(LEFT_ALIGNMENT);
name1.setBorder(BorderFactory.createLineBorder(Color.red, 1));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 2;
pane.add(name1, c); JLabel name3 = new JLabel("长宽高:", JLabel.RIGHT);
name3.setAlignmentY(Label.RIGHT);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 3;
pane.add(name3, c); JTextField jtf3 = new JTextField("10,10,10", 8);
jtf3.setAlignmentY(LEFT_ALIGNMENT);
jtf3.setBorder(BorderFactory.createLineBorder(Color.red, 1));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 3;
pane.add(jtf3, c);
okButton = new JButton("OK");
c.gridx = 0;
c.gridy = 4;
pane.add(okButton, c);
cancelButton = new JButton("Cancel");
// cancelButton.
c.gridx = 1;
c.gridy = 4;
pane.add(cancelButton, c);
setContentPane(pane); }
}
public class AddRoom extends JDialog implements ActionListener { HomeCadGui parentJFrame;
JButton okButton, cancelButton; public AddRoom(HomeCadGui mainFrame) {
super(mainFrame, "Add a new room", true);
this.parentJFrame = mainFrame; Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(5, 5, 5, 5); JLabel title = new JLabel("请输入room信息,多个字段使用,分割");
title.setAlignmentY(Label.RIGHT);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.gridwidth=2;
pane.add(title, c);
JLabel name0 = new JLabel("添加坐标:", JLabel.RIGHT);
name0.setAlignmentY(Label.RIGHT);
c.gridwidth=1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 1;
pane.add(name0, c); JTextField jtf0 = new JTextField(parentJFrame.getSelectX() + ","
+ parentJFrame.getSelectY(), 8);
jtf0.setAlignmentY(LEFT_ALIGNMENT);
jtf0.setBorder(BorderFactory.createLineBorder(Color.red, 1));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 1;
pane.add(jtf0, c); JLabel name = new JLabel("Room's name:", JLabel.RIGHT);
name.setAlignmentY(Label.RIGHT);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 2;
pane.add(name, c); JTextField name1 = new JTextField(16);
name1.setAlignmentY(LEFT_ALIGNMENT);
name1.setBorder(BorderFactory.createLineBorder(Color.red, 1));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 2;
pane.add(name1, c); JLabel name3 = new JLabel("长宽高:", JLabel.RIGHT);
name3.setAlignmentY(Label.RIGHT);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 3;
pane.add(name3, c); JTextField jtf3 = new JTextField("10,10,10", 8);
jtf3.setAlignmentY(LEFT_ALIGNMENT);
jtf3.setBorder(BorderFactory.createLineBorder(Color.red, 1));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 3;
pane.add(jtf3, c);
okButton = new JButton("OK");
c.gridx = 0;
c.gridy = 4;
pane.add(okButton, c);
cancelButton = new JButton("Cancel");
// cancelButton.
c.gridx = 1;
c.gridy = 4;
pane.add(cancelButton, c);
setContentPane(pane); }
}
另外,这个也行,你把 左边 label 设置成 gridWidth = 1, 右边的 text field 设置成 gridWidth = 3,
然后左边 button 的 gridWidth=1 gridx = 1,右边的 gridWidth = 1, gridx = 2。
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;import layout.TableLayout;public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
double[][] size = {{0.33, 0.67}, {p, p, p, p, p}};
TableLayout layout = new TableLayout(size);
frame.setLayout(layout);
frame.add(new JLabel("请输入room信息,多个字段使用','分割"), "0,0, 1,0");
frame.add(new JLabel("添加坐标: "), "0,1, r");
frame.add(new JTextField(""), "1,1");
frame.add(new JLabel("Room's name: "), "0,2, r");
frame.add(new JTextField(""), "1,2");
frame.add(new JLabel("长宽高: "), "0,3, r");
frame.add(new JTextField(""), "1,3");
double[][] size2 = {{f, f}, {p}};
JPanel panel = new JPanel(new TableLayout(size2));
panel.add(new JButton("OK"), "0,0");
panel.add(new JButton("Cancel"), "1,0");
frame.add(panel, "0,4, 1,4"); // ---------------------- Frame's setting ----------------------//
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(320, 180);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
谢谢各位