使用Java及其SWING库

时间:2009-11-12 20:21:14

标签: java user-interface swing

我正在尝试使用java编写一个非常简单的表单,但由于swing放置组件的方式,我遇到了比预期更多的麻烦,我尝试了各种不同的布局管理器,但仍然无法按照我的方式布局表单喜欢。

以下是我希望表单的外观:link text

有没有人对如何解决这个问题有任何想法,因为我很难过?

感谢。

9 个答案:

答案 0 :(得分:1)

最简单的目的是GridLayout。正如Aaron所说,如果你不想学习布局管理器,Netbeans有一个很好的GUI构建器。

答案 1 :(得分:1)

不使用gridbaglayout,可以通过borderlayout,gridlayout和flowlayout来实现。首先将表单分成大的视觉片段,然后将子布局置于顶级视觉片段之下。

例如,在这种情况下,我会这样做:

  1. 通过gridlayout(或borderlayout)将表单分成两个垂直的部分;标签和文本字段的顶部(或中央)部分,按钮的底部(或南部)。
  2. 在顶部,使用中心对齐的flowlayout或另一个gridlayout来排列标签和文本字段。
  3. 在底部,使用带有居中对齐方式的flowlayout按钮。
  4. 我在Java swing工作了4年,最初设计布局是一个障碍,但练习的次数越多越容易。

答案 2 :(得分:1)

看看Table Layout。它比几乎所有的默认布局管理器更容易使用。使用它构建表单非常简单。

答案 3 :(得分:1)

GridBagLayout起初可能令人生畏,但它非常灵活,值得了解。

JButton button = ...;

JLabel[] labels = new JLabel[]  {
    new JLabel("Label 1"),
    ...
};

JTextField[] fields = new JTextField[] {
    new JTextField(15),
    ...
};

JPanel[] rows = new JPanel[] {
    new JPanel(),
    ...
}

Container container = getContentPane(); 
container.setLayout(new GridBagLayout());
GridBagConstraints cons = new GridBagConstraints();

// Layout each row's contents(label + text field)
cons.fill = GridBagConstraints.BOTH;
cons.insets = new Insets(2, 8, 2, 8);
for (int i = 0; i < rows.length; ++i) {
    rows[i].setLayout(new GridBagLayout());
    // Labels get 30% of the row's extra horizontal space.
    cons.weightx = 0.3;
    rows[i].add(labels[i], cons); 

    // Text fields gets 70% of the row's extra horizontal space.
    cons.weightx = 0.7;
    rows[i].add(fields[i], cons);

     // Add each row to the panel, top to bottom
     // Each row takes up all of the horizontal space.
    cons.gridx = 0;
    cons.weightx = 1;
    container.add(rows[i], cons);
    cons.gridx = GridBagConstraints.RELATIVE;
}

// Add the button at the bottom.
// Dont let button get any extra horizontal space (so it won't stretch)
cons.gridx = 0;
cons.weightx = 0;
cons.fill = GridBagConstraints.NONE;
container.add(button, cons);

答案 4 :(得分:1)

到目前为止,我尝试过的最容易使用的布局管理器,至少是为了做类似的事情,是DesignGridLayout。有了它,代码看起来像:

layout.row().grid(new JLabel("JLabel1")).add(new JTextField());
layout.row().grid(new JLabel("JLabel2")).add(new JTextField());
...
layout.row().grid(new JLabel("JLabel5")).add(new JTextField());
layout.row().center().add(new JButton("JButton"));

答案 5 :(得分:0)

这样的表格应该非常容易设计和手工编码。继续阅读文档并一起玩。

另一种选择是使用GUI Builder,Netbeans在去年看了一眼时给我留下了深刻的印象。我不再使用Java了,所以我不能为你提供很多细节。

Netbeans GUI Builder (Formerly Matisse)

答案 6 :(得分:0)

我建议您使用NetBeans。 它更容易,因为它生成包含布局管理器的代码,因此您不必担心它。这对初学者来说很好。

答案 7 :(得分:0)

我会使用BorderLayout做一个主面板。

南区会有一个带有按钮的面板。

中心区域将保持一个面板,其中包含网格布局,网格包布局或某种盒子布局,可以将标签和文本框放在一起。

答案 8 :(得分:0)

我非常喜欢用于布置简单(和复杂)表单的JGoodies Forms工具。它很容易使用,并有很好的例子。如果你想要看起来很漂亮的东西,你也可以使用它们的外观和感觉。