我正在尝试编写我认为应该是一个易于指定的对话框,我有一些标签和它们对面的一些文本区域,然后是一个确定和取消按钮。在中间我有一个很宽的组件(例如,我使用了一个标签)
|label| [combo box]
|label| [txtfield]
|label| [txtfield]
| long label here |
[btn1] [btn2]
我正在尝试使用 GridBagLayout,它没有做我想要的,我不确定我是否理解为什么。基本上我希望将按钮锚定到对话框的底部。
下面的代码鞋我如何使用它:
package gui;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class GridBagLayoutExample2 extends JFrame {
private static final long serialVersionUID = -1972347726217162551L;
final private JLabel lbl1 = new JLabel("LABEL1: ");
final private JLabel lbl2 = new JLabel("LABEL2: ");
final private JLabel lbl3 = new JLabel("LABEL3: ");
final private JTextArea txt1 = new JTextArea(" ");
final private JComboBox cmb1 = new JComboBox();
final private JTextArea txt2 = new JTextArea("");
final private JLabel lblLine = new JLabel("a compenent on all the line");
final private JButton btnOK = new JButton("OK");
final private JButton btnCancel = new JButton("Cancel");
public GridBagLayoutExample2() {
GridBagLayout bl = new GridBagLayout();
Container pane = getContentPane();
pane.setLayout(bl);
GridBagConstraints c = new GridBagConstraints();
int r = 0;
placeComponentInGridBagLayout(lbl1, pane, bl, c, 0, r, null, null, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, null, null, null, null);
placeComponentInGridBagLayout(cmb1, pane, bl, c, 1, r++, null, null, GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, null, null, null, null);
placeComponentInGridBagLayout(lbl2, pane, bl, c, 0, r, null, null, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, null, null, null, null);
placeComponentInGridBagLayout(txt2, pane, bl, c, 1, r++, null, null, GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, null, null, null, null);
placeComponentInGridBagLayout(lbl3, pane, bl, c, 0, r, null, null, GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, null, null, null, null);
placeComponentInGridBagLayout(txt1, pane, bl, c, 1, r++, null, null, GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, null, null, null, null);
placeComponentInGridBagLayout(lblLine, pane, bl, c, 0, r++, null, null, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 2, null, null, null);
placeComponentInGridBagLayout(btnOK, pane, bl, c, 0, null, null, null, GridBagConstraints.PAGE_END, GridBagConstraints.HORIZONTAL, null, null, null, null);
placeComponentInGridBagLayout(btnCancel, pane, bl, c, 1, null, null, null, GridBagConstraints.PAGE_END, GridBagConstraints.HORIZONTAL, null, null, null, null);
setSize(new Dimension(850, 350));
pack();
setVisible(true);
}
public static void placeComponentInGridBagLayout(Component component, Container container, GridBagLayout bagLayout, GridBagConstraints c, Integer gridX, Integer gridY, Double weightX, Double weightY, Integer anchor, Integer fill, Integer ipadx, Integer ipady,
Integer gridWidth, Integer gridHeight) {
if (c == null) {
c = new GridBagConstraints();
}
if (gridX != null) {
c.gridx = gridX;
}
if (gridY != null) {
c.gridy = gridY;
}
if (weightX != null) {
c.weightx = weightX;
}
if (weightY != null) {
c.weighty = weightY;
}
if (fill != null) {
c.fill = fill;
}
if (anchor != null) {
c.anchor = anchor;
}
if (ipadx != null) {
c.ipadx = ipadx;
}
if (ipady != null) {
c.ipady = ipady;
}
if (gridWidth != null) {
c.gridwidth = gridWidth;
}
if (gridHeight != null) {
c.gridheight = gridHeight;
}
bagLayout.setConstraints(component, c);
container.add(component);
}
}
知道我做错了什么吗?还有一种更现代的方式可以在 Swing 中实现同样的目标吗?
谢谢