我有一个混合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中,因为它是顶级容器。
我也尝试用玻璃板实现它,但根本没有成功。
是否有一个没有重构的解决方案,因为结构应尽可能保留。
答案 0 :(得分:1)
不要覆盖顶级容器的paint(),例如JApplet或JFrame。自定义绘制是通过覆盖JPanel(或JComponent)的paintComponent()方法完成的。然后将面板添加到框架中。
dialog.add("Center", gui);
这不是向面板添加组件的方法。阅读Container API以找到要使用的正确add(...)方法。也不要硬编码字符串值。每个布局管理器都包含可用作约束值的变量。
我想嵌入一个始终位于顶部且独立于底层绘图过程的面板。
不确定这是否有意义。如果面板总是在顶部,那么它将覆盖绘画。
我尝试使用JLayeredPane
这听起来像是正确的做法。您将分层窗格添加到框架或小程序。然后你可以在顶部有一个背景绘画面板和另一个透明面板。阅读Using Layered Panes上的Swing教程以获取一个工作示例。