叠加Swing组件

时间:2010-02-05 08:49:02

标签: java swing

是否有可能在Swing中将一个组件叠加(或堆叠)在另一个组件上?

我正在考虑在表格初始化正在进行时,有一个进度条(在前台),它位于JTable(在后台)的顶部......

5 个答案:

答案 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。将表放在底部面板上,并在进度条的顶部添加另一个面板。如果要阻止表格输入,请使进度条面板覆盖表格并附加鼠标监听器。