在JApplet中嵌入JPanel(始终在顶部)

时间:2013-06-12 13:54:12

标签: java swing japplet hybrid

我有一个混合swing应用程序,它可以作为applet或java应用程序运行,具有以下结构:

public class Gui extends JApplet {

    public void init() {...}

    public void paint(Graphics g) {
       ...
       g.drawImage(image, 0, 0, this);
    }

    public static void main(String args[]) {

       JFrame frame = new JFrame();
       JDialog dialog = new JDialog(frame);

       Gui gui = new Gui();
       gui.init();
       gui.start();

       dialog.add("Center", gui);

       ...
    }

}

整个gui由一个不断更新的绘图区域组成。 我想嵌入一个始终位于顶部且独立于底层绘图过程的面板。

我尝试使用JLayeredPane并在JDialog和JApplet之间添加它,但Japplet无法添加到Pane中,因为它是顶级容器。

我也尝试用玻璃板实现它,但根本没有成功。

是否有一个没有重构的解决方案,因为结构应尽可能保留。

1 个答案:

答案 0 :(得分:1)

不要覆盖顶级容器的paint(),例如JApplet或JFrame。自定义绘制是通过覆盖JPanel(或JComponent)的paintComponent()方法完成的。然后将面板添加到框架中。

dialog.add("Center", gui);

这不是向面板添加组件的方法。阅读Container API以找到要使用的正确add(...)方法。也不要硬编码字符串值。每个布局管理器都包含可用作约束值的变量。

  

我想嵌入一个始终位于顶部且独立于底层绘图过程的面板。

不确定这是否有意义。如果面板总是在顶部,那么它将覆盖绘画。

  

我尝试使用JLayeredPane

这听起来像是正确的做法。您将分层窗格添加到框架或小程序。然后你可以在顶部有一个背景绘画面板和另一个透明面板。阅读Using Layered Panes上的Swing教程以获取一个工作示例。