2012-04-02 21 views
3

在我的应用程序中,我得到了包含JSplitPane的框架。 JSplitPane被设置为水平分割。在左侧有一个包含一些无关紧要的组件的面板。 在右边,我得到JPanelBoxLayout),其中包含JScrollPane内的JTextArea的子类,JScrollPane内的JTextPaneJButton与JTextArea一起使用JSplitPane

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

我已经尝试了不同的设置,也设置preferredSize和MaximumSize,但没有一个这似乎工作。组件停留在其首选大小。如果我试图让它们更小,scrollPane的工作原理(这很好),但是当我尝试让它们变大时,它们保持在首选大小。

+0

java swing,当我使用那个东西时,我曾经做过噩梦。 [颤抖......] o_O – ApprenticeHacker 2012-04-02 15:17:53

+0

嗯即时差点完成所以找到其他选项并不是一个好主意^^ – Giannis 2012-04-02 15:18:57

+0

+1为您的决心和信念。在我看来,使用java swing和_living来讲述这个故事_应该获得诺贝尔奖。 – ApprenticeHacker 2012-04-02 15:20:35

回答

2

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

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

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

使用缩放内部组件的另一个布局。例如BorderLayoutCENTER区域具有此类行为。

+0

试过了。完全相同的行为。 – Giannis 2012-04-02 15:24:21

+0

JScrollPane能成为问题吗?虽然textArea/textPane不能没有JScrollPane .. – Giannis 2012-04-02 15:30:47

+0

一个空面板以某种方式导致该问题..虽然布局也可能有所帮助。谢谢 ! – Giannis 2012-04-02 15:34:21

0

就个人而言,我会使用GridBagLayout来处理任何需要智能缩放的东西。 GridBagLayout起初似乎很吓人,但一旦你掌握了它,它并不是那么糟糕。您也可以尝试MiGLayout,这可能更容易学习,但在某些情况下可以像GridBagLayout一样冗长。

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

+0

我得到了工作的东西。导致问题的原因是我试图调整大小的JPanel在另一个JPanel中。一旦外部面板被删除,它的工作。虽然我会使用GridBagLayout进行一些测试,以了解它。干杯。 – Giannis 2012-04-02 19:55:39

0

对我来说,简单地在JTextArea上设置非0的最小尺寸解决了当使用带有BoxLayout的JTextArea时无法调整JSplitPane的大小的问题。

jTextPane.setMinimumSize(new Dimension(50, 50));