java - 将 JPanel 嵌入 JApplet(始终位于顶部)

标签 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);

       ...
    }

}

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

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

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

是否有一种解决方案,无需进行太多重构,因为应尽可能保留结构。

最佳答案

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

dialog.add("Center", gui);

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

I would like to embed a panel which is always on top and independent of the underlying drawing process.

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

I tried using JLayeredPane

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

关于java - 将 JPanel 嵌入 JApplet(始终位于顶部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067363/

相关文章:

java - 如何修复 'java.io.FileNotFoundException: at sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (Unknown Source)'错误?

java - Gson.toString() 给出错误 "IllegalArgumentException: multiple JSON fields named mPaint"

java - 从 JavaFX WebView 中的 Ace Editor 获取代码

java - JApplet setBackground 不工作

java - 绘图时的 JApplet 加载屏幕

java - JDOM 解析速度比 DOM 慢得多

java - 为什么 ImageIcon 不起作用?

java - 无法从各个 BufferedImage 像素获取正确的 alpha 值

java - 如何防止我的 JScrollPane/JTextArea 超出包含的 JTabbedPane?

Java - 小程序根本不显示?