【问题标题】:Parent panel not painted父面板未绘制
【发布时间】:2013-02-01 19:03:12
【问题描述】:

我有以下 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()); 
    }       

}

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

谢谢!

【问题讨论】:

    标签: java swing jpanel transparency paintcomponent


    【解决方案1】:

    当父面板被另一个具有透明背景的面板覆盖时,它不会被绘制(即,paintComponent() 甚至没有被调用)

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

    childPanel.setOpaque(false);
    

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

    【讨论】:

    • 谢谢 - 这很好用(我使用的是 alpha 值为 0 的 JPanel.setBackground)。
    【解决方案2】:

    作为替代方案,请考虑org.jfree.chart.JFreeChartsetBackgroundImage() 方法,它还具有控制对齐和alpha 的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 2012-12-11
      • 2012-09-07
      相关资源
      最近更新 更多