【问题标题】:Superimposing Swing components叠加 Swing 组件
【发布时间】:2010-02-05 08:49:02
【问题描述】:

Swing 中是否可以将一个组件叠加(或堆叠)到另一个组件上?

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

【问题讨论】:

    标签: java swing


    【解决方案1】:

    是的,有几种方法可以做到这一点。

    这可以通过将其添加到玻璃窗格中来完成,但这通常会阻止您的 UI。

    我会研究JXLayer,它允许您包装组件以执行额外的绘画工作。还有一个 JBusyComponent 依赖于这个库,它可能会做你想要的。

    【讨论】:

      【解决方案2】:

      对于您的情况,我建议您创建一个扩展 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);
          }
      
      }
      

      【讨论】:

        【解决方案3】:

        自己动手,可能是使用玻璃板:

        • 使其可见并绘制 进度条
        • 一旦表被初始化,删除 从玻璃板组件和 隐藏它

        【讨论】:

          【解决方案4】:

          我会使用JLayeredPanes。将表格放在底部面板上,并在顶部添加另一个面板作为进度条。如果要阻止表格输入,请让进度条面板覆盖表格并为其附加鼠标侦听器。

          【讨论】:

            【解决方案5】:

            我远未成为 Swing 编程专家,所以我的回答不会太精确。答案是肯定的=)。您可以查看panesJFrame 并将进度条放在玻璃窗格或分层窗格中。

            【讨论】:

              猜你喜欢
              • 2023-03-26
              • 2012-09-13
              • 2012-02-10
              • 2011-09-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-10
              • 1970-01-01
              相关资源
              最近更新 更多