【发布时间】:2014-10-14 23:55:21
【问题描述】:
我想制作一个看起来或多或少如下图所示的应用程序:
我已经为 top JPanel 编写了代码,但我没有得到例外的结果。我的输出是这样的:
这是我的代码:
public class Main extends JPanel {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
new Main().frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Main() {
frameinit();
}
/**
* Initialize the contents of the frame.
*/
private void frameinit() {
frame = new JFrame();
frame.setTitle("Tool Title");
frame.add(this);
frame.setPreferredSize(new java.awt.Dimension(1000, 800));
frame.setSize(new Dimension(1000,800));
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
this.setLayout(new GridBagLayout());
GridBagConstraints c;
JLabel LTitle,Lcus,Lmode,Lsc,Lcorbank,Lavd,Lrate,Lcrate,Lvaldate,Lbc,Lr;
JTextField Tcus,Tmode,Tsc,Tcorbank,Tavd,Trate,Tcrate,Tvaldate,Tbc,Tr;
LTitle = new JLabel("Title");
c = new GridBagConstraints();
c.gridx=0;
c.gridy=0;
c.gridwidth=4;
c.gridheight=1;
add(LTitle, c);
Lcus = new JLabel("Customer");
c.gridx=0;
c.gridy=1;
c.gridwidth=1;
c.gridheight=1;
add(Lcus, c);
Lmode = new JLabel("Mode");
c.gridx=0;
c.gridy=2;
c.gridwidth=1;
c.gridheight=1;
add(Lmode, c);
Lsc = new JLabel("Sell Ccy");
c.gridx=0;
c.gridy=3;
c.gridwidth=1;
c.gridheight=1;
add(Lsc, c);
Lcorbank = new JLabel("Correspondant Bank");
c.gridx=0;
c.gridy=4;
c.gridwidth=1;
c.gridheight=1;
add(Lcorbank, c);
Lavd = new JLabel("Amount Value Date");
c.gridx=0;
c.gridy=5;
c.gridwidth=1;
c.gridheight=1;
add(Lavd, c);
Lrate = new JLabel("Rate");
c.gridx=2;
c.gridy=1;
c.gridwidth=1;
c.gridheight=1;
add(Lrate, c);
Lcrate = new JLabel("Coverage Rate");
c.gridx=2;
c.gridy=2;
c.gridwidth=1;
c.gridheight=1;
add(Lcrate, c);
Lavd = new JLabel("Value Date");
c.gridx=2;
c.gridy=3;
c.gridwidth=1;
c.gridheight=1;
add(Lavd, c);
Lbc = new JLabel("Buy Ccy");
c.gridx=2;
c.gridy=4;
c.gridwidth=1;
c.gridheight=1;
add(Lbc, c);
Lr = new JLabel("Remarks");
c.gridx=2;
c.gridy=5;
c.gridwidth=1;
c.gridheight=1;
add(Lr, c);
Tcus = new JTextField();
c.gridx=1;
c.gridy=1;
c.gridwidth=1;
c.gridheight=1;
add(Tcus, c);
Tmode = new JTextField();
c.gridx=1;
c.gridy=2;
c.gridwidth=1;
c.gridheight=1;
add(Tmode, c);
Tsc = new JTextField();
c.gridx=1;
c.gridy=3;
c.gridwidth=1;
c.gridheight=1;
add(Tsc, c);
Tcorbank = new JTextField();
c.gridx=1;
c.gridy=4;
c.gridwidth=1;
c.gridheight=1;
add(Tcorbank, c);
Tavd = new JTextField();
c.gridx=1;
c.gridy=5;
c.gridwidth=1;
c.gridheight=1;
add(Tavd, c);
Trate = new JTextField();
c.gridx=4;
c.gridy=1;
c.gridwidth=1;
c.gridheight=1;
add(Trate, c);
Tcrate = new JTextField();
c.gridx=4;
c.gridy=2;
c.gridwidth=1;
c.gridheight=1;
add(Tcrate, c);
Tvaldate = new JTextField();
c.gridx=4;
c.gridy=3;
c.gridwidth=1;
c.gridheight=1;
add(Tvaldate, c);
Tbc = new JTextField();
c.gridx=4;
c.gridy=4;
c.gridwidth=1;
c.gridheight=1;
add(Tbc, c);
Tr = new JTextField();
c.gridx=4;
c.gridy=5;
c.gridwidth=1;
c.gridheight=1;
add(Tr, c);
}
}
【问题讨论】:
-
来自official tutorial:“除非您为 weightx 或 weighty 指定至少一个非零值,否则所有组件都会在其容器的中心聚集在一起。”。此外,您可能希望将一些值设置为
anchor和fill。 -
哇它的工作。谢谢 DSquare。我努力添加了锚点和填充,我只是将 weightx 和 weight 添加到 1。谢谢兄弟。你能告诉我在这种情况下保持锚的价值吗?锚点只需要 pagestart、pageend 和 blablabla。在这里我认为我们不能使用它们对吗?
-
anchor和fill的默认值在大多数情况下工作得很好,但是它们对于进一步自定义每个组件的行为很有用。例如,如果您希望 JTextField 尽可能宽 (fill=HORIZONTAL),或者如果您希望它接触右边距而不是左边距 (anchor=LINE_END)... -
@DSquare 请将您的 cmets 组成一个答案,以便(我可以投票并且......)OP 可以accept it。
标签: java swing layout-manager gridbaglayout