在我的应用程序中,我得到了包含JSplitPane的框架。JSplitPane被设置为水平拆分。在左侧有一个面板,其中包含一些不重要的组件。在右边,我得到了一个JPanel(BoxLayout),其中包含了JScrollPane中的JTextArea子类,JScrollPane中的JTextPane,以及JButton。
我的问题是如何根据与JSplitPane的交互来调整组件(主要在右边)的大小。所以当JSplitPane被拖到左边时,我的JTextArea和JTextPane就变宽了。
我尝试过不同的设置,也设置了preferredSize和MaximumSize,但这些似乎都不起作用。组件停留在它们的preferredSize上。如果我试图使它们变小,scrollPane就能工作(这很好),但是当我试图使它们变大时,它们会保持首选的大小。
发布于 2012-04-02 15:21:50
很可能您的问题是由于您的右面板上使用的BoxLayout。从类javadoc复制粘贴:
BoxLayout尝试以其首选宽度(用于水平布局)或高度(用于垂直布局)排列组件。对于水平布局,如果不是所有组件的高度相同,BoxLayout会尝试使所有组件与最高组件一样高。如果对特定组件不可能这样做,那么BoxLayout根据组件的Y对齐垂直对齐该组件。默认情况下,组件的Y对齐度为0.5,这意味着组件的垂直中心应该与具有0.5Y对齐的其他组件的垂直中心具有相同的Y坐标。 类似地,对于垂直布局,BoxLayout试图使列中的所有组件与最宽的组件一样宽。如果失败,它将根据它们的X对齐水平地对齐它们。对于PAGE_AXIS布局,水平对齐是基于组件的前缘进行的。换句话说,如果容器的ComponentOrientation从左到右,X对齐值0.0表示组件的左边缘,否则表示组件的右侧边缘。
使用另一个可缩放内部组件的布局。例如,一个CENTER区域的BorderLayout具有这样的行为。
发布于 2012-04-02 19:30:15
就我个人而言,我会使用GridBagLayout来处理任何需要智能扩展的东西。GridBagLayout一开始看起来很吓人,但是一旦你掌握了它的诀窍,它就不会那么糟糕了。您还可以尝试MiGLayout,它可能更容易学习,但在某些情况下可以与GridBagLayout一样详细。
如果您不想了解GridBagLayout或MiGLayout的所有细微之处,可以安装WindowBuilder插件用于Eclipse,并使用WindowBuilder的Swing Designer向导和WYSIWYG编辑器来设置布局。
发布于 2015-01-31 21:58:47
对我来说,只需在JTextArea上设置一个非0的最小大小就可以解决JSplitPane在使用JTextArea和BoxLayout时无法调整大小的问题。
jTextPane.setMinimumSize(new Dimension(50, 50));https://stackoverflow.com/questions/9978989
复制相似问题