【发布时间】:2010-02-05 08:49:02
【问题描述】:
在Swing 中是否可以将一个组件叠加(或堆叠)到另一个组件上?
我正在考虑有一个进度条(在前台),它会在表初始化正在进行时位于 JTable 的顶部(在后台)...
【问题讨论】:
在Swing 中是否可以将一个组件叠加(或堆叠)到另一个组件上?
我正在考虑有一个进度条(在前台),它会在表初始化正在进行时位于 JTable 的顶部(在后台)...
【问题讨论】:
是的,有几种方法可以做到这一点。
这可以通过将其添加到玻璃窗格中来完成,但这通常会阻止您的 UI。
我会研究JXLayer,它允许您包装组件以执行额外的绘画工作。还有一个 JBusyComponent 依赖于这个库,它可能会做你想要的。
【讨论】:
对于您的情况,我建议您创建一个扩展 JTable 的自定义 Table,然后将 ProgressBar 添加为自定义组件的子组件。
一个非常粗略的实现:
public class TableProgress extends JTable {
public TableProgress() {
JProgressBar comp = new JProgressBar();
add(comp);
comp.setLocation(100, 100);
comp.setSize(100, 100);
}
public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLayout(new BorderLayout());
jFrame.setPreferredSize(new Dimension(500, 500));
TableProgress comp = new TableProgress();
jFrame.getContentPane().add(comp, BorderLayout.CENTER);
jFrame.pack();
jFrame.setVisible(true);
}
}
【讨论】:
自己动手,可能是使用玻璃板:
【讨论】:
我会使用JLayeredPanes。将表格放在底部面板上,并在顶部添加另一个面板作为进度条。如果要阻止表格输入,请让进度条面板覆盖表格并为其附加鼠标侦听器。
【讨论】:
我远未成为 Swing 编程专家,所以我的回答不会太精确。答案是肯定的=)。您可以查看panes 的JFrame 并将进度条放在玻璃窗格或分层窗格中。
【讨论】: