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