java - 父面板未绘制

标签 java swing jpanel transparency paintcomponent

我遇到以下 Java Swing 问题:当父面板被另一个具有透明背景的面板覆盖时,父面板不会被绘制(即,paintComponent() 甚至不会被调用)。

如果子面板不透明,我想这种行为是正常的,但这是一个问题,因为父面板提供图片作为背景。

可能不相关,但你永远不知道:子面板是来自 JFreeChart 库的 ChartPanel(扩展 JPanel),父面板也是 JPanel 扩展,因此 PaintComponent 代码:

@Override

public void paintComponent(Graphics g) {
    try {
        long start = System.currentTimeMillis();

        //Sets waiting cursor
        GuiHelper.setCursorOnEntireWindow(Cursor.WAIT_CURSOR);

        //Paints parent
        super.paintComponent(g);

        //Paints background and other elements
        g.drawImage(generateBackground(getWidth(), getHeight()), 0, 0, getWidth(), getHeight(), this);

        long end = System.currentTimeMillis();
        System.out.println("Chart paint took: "+(end-start)+"ms");
    }
    finally { 
        //Removes waiting cursor
        GuiHelper.setCursorOnEntireWindow(Cursor.getDefaultCursor().getType()); 
    }       

}

任何帮助/提示将不胜感激,因为我已经研究了几个小时了。

谢谢!

最佳答案

a parent panel doesn't get painted (i.e. paintComponent() not even called) when it is covered by another panel which has a transparent background

不确定您如何设置 ChartPanel 的透明背景。我认为你只需要使用:

childPanel.setOpaque(false);

如果这不起作用,请查看 Background With Transparency有关如何在子/父组件之间完成绘制的更多信息。

关于java - 父面板未绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14653275/

相关文章:

java - GridBagLayout 粘附组件

java - 在Java中打印固定大小的 double

java - frame.setResizable(false) 不起作用

java - 哪个 Java Web 框架与 ASP.NET MVC 非常相似?

java - 如何阻止swing应用程序的所有窗口并在它们之上显示JDialog?

java - 将证书添加到 com.sun.net.httpserver.HttpsServer

java - JApplet 无法连接到互联网问题 - 如何使其受信任?

java - 自动将 Oracle 表中的数组列表添加到 JTable

java - cordova 构建 android > JDK 1.8 检查失败

java - 如何使用 java servlet 和 HttpURLConnection 对文件传输进行校验和