我有以下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());
}
}
任何帮助/提示都会非常受欢迎,因为我现在已经考虑了好几个小时了。
谢谢!
答案 0 :(得分:2)
当父面板被另一个具有透明背景的面板覆盖时,它不会被绘制(即paintComponent()甚至不被调用)
不确定如何设置ChartPanel的透明背景。我想你只需要使用:
childPanel.setOpaque(false);
如果这样做不起作用,请查看Background With Transparency以获取有关如何在子/父组件之间进行绘画的更多信息。
答案 1 :(得分:2)
作为替代方案,请考虑org.jfree.chart.JFreeChart
的{{3}}方法,该方法还具有控制对齐和alpha的方法。