使用 ComponentResizer 时重叠组件
Overlap Components When Using ComponentResizer
我想让我的 jTable 在使用 ComponentResizer class 拖动时 floating/overlay 可扩展。我正在使用 Rob Camick 的 ComponentResizer
class。
拖动table后当前如下:
我尝试将布局更改为空,但结果仍然相同。
在我的代码中,我只是添加了调用 ComponentResizer class:
ComponentResizer cr = new ComponentResizer();
cr.setSnapSize(new Dimension(10, 10));
cr.registerComponent(jScrollPane2);
我希望拖动 table 会浮动并覆盖其下方的组件。
Swing 旨在绘制 2D 组件 space,而非 3D space。
因此,当将组件添加到同一面板时,Swing 将按照组件添加到面板的相反顺序绘制组件。在您的情况下,您似乎在将滚动窗格添加到面板之前将组件添加到面板。
所以你可以:
- 颠倒将组件添加到面板的顺序
- 在scrollpane上使用
setComponentZOrder(...)
方法将其值设置为0,所以最后绘制。
但是,这仍然会导致问题,因为如果您将鼠标悬停在按钮上,按钮将会出现,因为它的边框已更改。这是因为 Swing 假定 2D 布局而不是 3D。如果您想确保 table 始终绘制在按钮上,您需要重写面板的 isOptimizedDrawingEnable()
方法。有关 ZOrder 绘画的更多信息,请参阅 Overlap Layout。
我通过将所有组件放在一个分层窗格中并使用边框布局解决了这个问题。
我想让我的 jTable 在使用 ComponentResizer class 拖动时 floating/overlay 可扩展。我正在使用 Rob Camick 的 ComponentResizer
class。
拖动table后当前如下:
我尝试将布局更改为空,但结果仍然相同。 在我的代码中,我只是添加了调用 ComponentResizer class:
ComponentResizer cr = new ComponentResizer();
cr.setSnapSize(new Dimension(10, 10));
cr.registerComponent(jScrollPane2);
我希望拖动 table 会浮动并覆盖其下方的组件。
Swing 旨在绘制 2D 组件 space,而非 3D space。
因此,当将组件添加到同一面板时,Swing 将按照组件添加到面板的相反顺序绘制组件。在您的情况下,您似乎在将滚动窗格添加到面板之前将组件添加到面板。
所以你可以:
- 颠倒将组件添加到面板的顺序
- 在scrollpane上使用
setComponentZOrder(...)
方法将其值设置为0,所以最后绘制。
但是,这仍然会导致问题,因为如果您将鼠标悬停在按钮上,按钮将会出现,因为它的边框已更改。这是因为 Swing 假定 2D 布局而不是 3D。如果您想确保 table 始终绘制在按钮上,您需要重写面板的 isOptimizedDrawingEnable()
方法。有关 ZOrder 绘画的更多信息,请参阅 Overlap Layout。
我通过将所有组件放在一个分层窗格中并使用边框布局解决了这个问题。