gpt4 book ai didi

java - JSplitPane 和 Canvas

转载 作者:行者123 更新时间:2023-11-30 05:56:45 26 4
gpt4 key购买 nike

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

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 直接渲染到 Canvas 上的情况一样)
  • 插入在某些情况下可能有效的狡猾黑客

有更好的方法吗?或者这真的只是求助于黑客的情况吗?我已经讨论过其他选项,例如是否可以使用替代的 SplitPane 实现,但没有重量级的实现,如果轻量级的实现可以避免这个问题,我会感到惊讶。

最佳答案

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

我以前从未使用过 Canvas,但看起来最小尺寸始终默认为首选尺寸。

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

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

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

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

关于java - JSplitPane 和 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com