在我的应用程序中,我得到了包含JSplitPane
的框架。 JSplitPane
设置为水平分割。在左侧有一个面板,其中包含一些无关紧要的组件。
在右侧,我在JPanel
中包含BoxLayout
的子JTextArea
,JScrollPane
内的JTextPane
,以及JScrollPane
。
我的问题是如何基于交互来获取调整大小的组件(主要是在右侧) 与JSplitPane。所以当JSplitPane被拖到左边时,我的 JTextArea和JTextPane变得更宽。
我尝试过不同的设置,同时设置preferredSize和MaximumSize,但这似乎都不起作用。组件保持在他们的首选大小。如果我试图让它们变小,则scrollPane可以正常工作(这很好)但是当我试图让它们变大时,它们会保持优先尺寸。
答案 0 :(得分:2)
您的问题很可能是由于右侧面板上使用的BoxLayout
造成的。从类javadoc复制粘贴:
BoxLayout尝试将组件排列为首选宽度(水平布局)或高度(垂直布局)。对于水平布局,如果不是所有组件都具有相同的高度,BoxLayout会尝试使所有组件与最高组件一样高。如果对于特定组件不可能,则BoxLayout根据组件的Y对齐垂直对齐该组件。默认情况下,组件的Y对齐为0.5,这意味着组件的垂直中心应与具有0.5 Y对齐的其他组件的垂直中心具有相同的Y坐标。
同样,对于垂直布局,BoxLayout会尝试使列中的所有组件与最宽的组件一样宽。如果失败,则根据X对齐水平对齐它们。对于PAGE_AXIS布局,水平对齐基于组件的前沿完成。换句话说,如果容器的ComponentOrientation从左到右,则X对齐值0.0表示组件的左边缘,否则表示组件的右边缘
使用另一种缩放内部组件的布局。例如,CENTER
的{{1}}区域具有此类行为。
答案 1 :(得分:0)
就个人而言,我会使用GridBagLayout来表示需要智能扩展的任何内容。 GridBagLayout起初看起来很吓人,但是一旦掌握了它,就不会那么糟糕了。您也可以尝试MiGLayout,这可能更容易学习,但在某些情况下可能与GridBagLayout一样冗长。
如果您不想学习GridBagLayout或MiGLayout的所有细微差别,可以安装Eclipse的WindowBuilder插件,并使用WindowBuilder的Swing Designer向导和WYSIWYG编辑器来设置布局。
答案 2 :(得分:0)
对我来说,简单地在JTextArea上设置非0最小尺寸解决了在将JTextArea与BoxLayout一起使用时无法调整JSplitPane大小的问题。
jTextPane.setMinimumSize(new Dimension(50, 50));