3

在我的应用程序中,我得到了包含JSplitPane. JSplitPane设置为水平拆分。在左侧有一个面板,其中包含一些无关紧要的组件。在右边,我得到了一个JPanel( BoxLayout),其中包含 a 内的子类、aJTextArea内的 a和 a的子类。JScrollPaneJTextPaneJScrollPaneJButton

我的问题是如何根据与 JSplitPane 的交互来调整组件(主要在右侧)的大小。所以当 JSplitPane 被拖到左边时,我的 JTextArea 和 JTextPane 会变宽。

我尝试了不同的设置,还设置了preferredSize 和MaximumSize,但这似乎都不起作用。组件保持其首选大小。如果我尝试让它们变小,则 scrollPane 可以工作(这很好),但是当我尝试让它们变大时,它们会保持在首选大小。

4

3 回答 3

2

您的问题很可能是由于BoxLayout右侧面板上使用的。从类 javadoc 复制粘贴:

BoxLayout 尝试以首选的宽度(对于水平布局)或高度(对于垂直布局)排列组件。对于水平布局,如果不是所有组件的高度相同,BoxLayout 会尝试使所有组件与最高组件一样高。如果特定组件无法做到这一点,则 BoxLayout 会根据组件的 Y 对齐方式垂直对齐该组件。默认情况下,组件的 Y 对齐为 0.5,这意味着组件的垂直中心应与其他具有 0.5 Y 对齐的组件的垂直中心具有相同的 Y 坐标。

同样,对于垂直布局,BoxLayout 尝试使列中的所有组件与最宽的组件一样宽。如果失败,它会根据它们的 X 对齐方式水平对齐它们。对于 PAGE_AXIS 布局,水平对齐是基于组件的前缘完成的。换句话说,如果容器的 ComponentOrientation 从左到右,则 X 对齐值 0.0 表示组件的左边缘,否则表示组件的右边缘

使用另一个布局来缩放内部组件。例如a的CENTER区域BorderLayout有这样的行为。

于 2012-04-02T15:21:50.267 回答
0

就个人而言,我会将GridBagLayout用于需要智能扩展的任何内容。GridBagLayout 一开始看起来很吓人,但是一旦你掌握了它,它就不是那么糟糕了。您也可以尝试MiGLayout,它可能更容易学习,但在某些情况下可能与 GridBagLayout 一样冗长。

如果您不想了解 GridBagLayout 或 MiGLayout 的所有细微差别,您可以安装适用于 Eclipse 的WindowBuilder插件并使用 WindowBuilder 的 Swing Designer 向导和 WYSIWYG 编辑器来设置您的布局。

于 2012-04-02T19:30:15.317 回答
0

对我来说,只需在 JTextArea 上设置一个非 0 的最小尺寸,就可以解决在将 JTextArea 与 BoxLayout 一起使用时无法调整 JSplitPane 大小的问题。

jTextPane.setMinimumSize(new Dimension(50, 50));
于 2015-01-31T21:58:47.603 回答