0

我有一个混合 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 添加到窗格中,因为它是顶级容器。

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

由于结构应尽可能保留,是否有无需重构的解决方案。

4

1 回答 1

1

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

dialog.add("Center", gui);

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

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

不确定这是否有意义。如果面板总是在上面,那么它会覆盖这幅画。

我尝试使用 JLayeredPane

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

于 2013-06-12T15:09:16.557 回答