我有一个混合 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/