2

作为我正在编写的应用程序的一部分,我需要将旧的(重量级)Canvas 与摆动组件混合在一起——特别是将它们嵌套在 JSplitPane 中。但是,当我这样做时,分隔线拒绝在任何地方调整大小,就好像两个画布都不会接受缩小尺寸一样。因此,演示该问题的代码是:

JFrame frame = new JFrame();
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new Canvas(), new Canvas());
pane.setResizeWeight(0.5);
frame.add(pane);
frame.pack();
frame.setVisible(true);

我最初认为这是一件很容易解决的事情,但是在进行了大量研究之后,这些选项似乎呈现为:

  • 改用 JPanel(在我使用 vlcj 直接渲染到画布上的情况下并不总是一个选项)
  • 插入在某些情况下可能有效的 x 狡猾的 hack

有没有更好的方法来做到这一点?或者它真的只是诉诸黑客的一个案例?我已经讨论过其他选项,例如是否可以使用替代的 SplitPane 实现,但没有重量级的实现,如果轻量级的实现避免了这个问题,我会感到惊讶。

4

1 回答 1

6

JSplitPane 使用组件的“最小尺寸”来确定组件在使用分隔符时是否可以缩小。

我以前从未使用过画布,但似乎最小尺寸总是默认为首选尺寸。

覆盖 Canvas 的 getMinimumSize(...) 大小方法以返回合理的最小值。

对于快速文本,您可以使用:

Canvas canvas = new Canvas();
canvas.setMinimumSize( new Dimension(50, 50) );
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, canvas, new Canvas());

并且您将能够将分隔线向左移动,但永远不能向右移动。

于 2011-07-18T03:20:38.610 回答