是否有可能在Swing中将一个组件叠加(或堆叠)在另一个组件上?
我正在考虑在表格初始化正在进行时,有一个进度条(在前台),它位于JTable(在后台)的顶部......
答案 0 :(得分:4)
是的,有几种方法可以做到这一点。
这可以通过将其添加到玻璃窗格来完成,但这通常会阻止您的UI。
我会调查JXLayer,它允许您包装组件以执行其他绘制作业。还有一个JBusyComponent依赖于这个库可能会做你想要的。
答案 1 :(得分:1)
对于您的情况,我建议您创建一个自定义表,扩展JTable,然后将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);
}
}
答案 2 :(得分:0)
我远远不是Swing编程的大师,所以我的回答不会太精确。答案是肯定的=)。您可以查看JFrame
的{{3}}并将进度条放在玻璃窗格或分层窗格中。
答案 3 :(得分:0)
自己动手,可以使用玻璃板:
答案 4 :(得分:0)
我会使用JLayeredPanes。将表放在底部面板上,并在进度条的顶部添加另一个面板。如果要阻止表格输入,请使进度条面板覆盖表格并附加鼠标监听器。