【问题标题】:JSplitPane and CanvasJSplitPane 和 Canvas
【发布时间】:2011-10-07 08:40:36
【问题描述】:

作为我正在编写的应用程序的一部分,我需要将旧的(重量级)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 实现,但没有重量级的实现,如果轻量级的实现避免了这个问题,我会感到惊讶。

【问题讨论】:

  • 您使用的是哪个版本的 Java?有些人在混合使用重质和轻质成分时表现得比其他人更好。
  • @Hovercraft Full Of Eels - 使用最新的 Java 6 和 Java 7 RC 测试 - 都给出了相同的结果。

标签: java swing canvas awt jsplitpane


【解决方案1】:

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

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

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

您可以使用快速文本:

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

您可以将分隔线向左移动,但永远不能向右移动。

【讨论】:

  • 非常感谢您的回答 - 它运行良好,我仍然很惊讶它竟然这么简单!
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多