我使用JXMultiSplitPane (来自SwingX 1.6.2)来实现一个三窗格的水平接口。在中间窗格中,有两个选项卡的JTabbedPane:一个带有用于输入Markdown代码的JTextArea (当然是在JScrollPane中),另一个是用于显示呈现出来的HTML预览的JEditorPane (同样在滚动窗格中)。当用户切换到预览窗格时,编辑器中的文本将被处理并显示在预览窗格中。
我的问题是,如果我在编辑器中输入行长的文本,然后切换到预览,则中心窗格将展开。有时它只是一点点,有时它会占用比实际屏幕上更多的空间。但是,如果我手动移动一个调整大小的手柄,一切都会恢复正常。
在这种情况发生之前,我只找到了两种处理方法:
我不能使用第二个,因为默认情况下,它会扩展中央窗格以占用几乎整个窗口。
有办法解决这个问题吗?
更新
经过更多的测试后,即使是技术(2)也不能保持大小不变;在两个选项卡之间切换会稍微改变中心窗格的大小。
我现在认为问题在一定程度上是与选项卡式窗格有关。JTextArea和JEditorPane没有相同的大小,当我在它们之间切换时,JTabbedPane正在调整大小(因为每次都要重置JEditorPane文本。这不会是一个问题,除非JXMultiSplitPane会自动调整中心窗格的大小,直到用户通过手动调整大小为止。
因此,我应该能够通过修改JTabbedPane的大小来解决这个问题,但是仍然可以通过句柄条来调整大小。有什么建议吗?
发布于 2011-08-23 11:50:46
MultiSplitLayout是.。LayoutManager,所以您必须了解它是如何工作的(我也是,我自己也不太熟悉它:-)
基本布局根据组件的prefSize进行,权重用于分配相对于pref的多余/缺失空间。默认情况下,分隔符是“浮动”的,也就是说,它们位于由基本机制布局的组件之间。当用户触摸一个分配器时,分配器是“不浮动”的,大小可以在分隔器之间进行调整。这就是为什么你没有看到大小-贪婪后,移动隔板一次。所以一条出路就是
字符串布局=“(行”+)(叶JXMulitSplitPane((MultiSplitLayout.parseModel(layout)) weight=0.15)“+”(叶name=center weight=0.7)“+”(叶name=list weight=0.15)“+”;JXMultiSpitPane窗格=新的name=center // add组件并实现.pane.getMultiSplitLayout().setFloatingDividers(false);
或者,赋予权重更多的权重--迫使layoutManager将其用于布局本身(而不是仅用于多余/缺失空间的分布)。一个副作用是,公司的prefSize可能会被设置(通过布局,这是一个没有-从不,但谁是完美的;-)
pane.getMulitSplitLayout().setLayoutByWeights(true);不确定我更喜欢哪种方式,或者在多重拆分中是否/如何使它变得更容易。
https://stackoverflow.com/questions/7135718
复制相似问题