JSplitPane and Canvas



作为我正在编写的应用程序的一部分,我需要将旧的(重量级)Canvas与swing组件混合-特别是将它们嵌套在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狡猾的黑客

有更好的方法吗?或者这真的只是一个诉诸黑客手段的案例?我已经讨论过其他的选择,比如是否有一个可以替代的SplitPane实现,但是没有重量级的实现,如果有一个轻量级的实现可以避免这个问题,我会很惊讶。

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

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

重写Canvas的getMinimumSize(…)方法,返回一个合理的最小值。

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

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

可以向左移动分隔符,但不能向右移动

相关内容

  • 没有找到相关文章

最新更新