0

我正在使用 Java 和 Swing 库设计一个应用程序(我也可以使用 AWT 的片段),并且我需要一些有关“自定义”布局的帮助。

我有一个很大的 JScrollPanel,我将在其中动态插入可变高度的 JPanel 。这是一个或多或少真实的画法:

|-------------------------------- JScrollPane ------------------------------|
| |------------------------------- JPanel --------------------------------| |
| |                                                                       | |
| |-----------------------------------------------------------------------| |
|                                                                           |
| |------------------------------- JPanel --------------------------------| |
| |                                                                       | |
| |                                                                       | |
| |-----------------------------------------------------------------------| |
|                                                                           |
|---------------------------------------------------------------------------|

然后我不知道使用哪些 Layouts.... 我希望 mainLayout不调整我内部 JPanel 的高度,而是调整它们的宽度。因此,例如,当我展开窗口时,我希望我的内部布局保持靠近左右边框,但不垂直展开。

有什么建议吗?

我希望我的英语和解释不会太糟糕。谢谢阅读!

4

1 回答 1

1

在这种情况下,我可能使用的布局是GridBagLayout或者VerticalLayout(来自 SwingLabs、SwingX 库)(但是当你只有锤子时,一切看起来都像钉子;))。

要使用GridBagLayout,您需要提供适当的约束来指示布局管理器水平填充面板,但要遵守高度。

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;

唯一的问题是GridBagLayout喜欢将其组件围绕父容器的中心位置居中。您可能需要将“填充”组件添加到占用剩余垂直空间的最后一个位置

gbc.weighty = 1;

应该够了

看看如何使用GridBagLayout了解更多详情

用非常基本的例子更新......

// Basic constraints...
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;

// Add your components...
add(panel, gbc);
//...

// Then add a fill component to push the layout to the top...
gbc.weighty = 1;
add(new JPanel(), gbc);
// You can use a constant value if you want, as it will be easier to remove
// so you can add new components to the end and re-add it when you're done
于 2013-11-07T22:56:54.030 回答