2

次の Java Swing の問題があります。透明な背景を持つ別のパネルで親パネルが覆われている場合、親パネルがペイントされません (つまり、paintComponent() が呼び出されません)。

子パネルが透明でない場合、この動作は正常だと思いますが、親パネルが背景として画像を提供するため、ここでは問題です。

おそらく関係ありませんが、わかりません: 子パネルは JFreeChart のライブラリ (JPanel を拡張) の ChartPanel であり、親パネルも JPanel 拡張です。

@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()); 
    }       

}

私は何時間も調べていたので、どんな助け/ヒントも大歓迎です。

ありがとう!

4

2 に答える 2

2

親パネルは、透明な背景を持つ別のパネルで覆われている場合、ペイントされません (つまり、paintComponent() は呼び出されません)。

ChartPanel の透明な背景をどのように設定しているかわかりません。私はあなたが使用する必要があると思います:

childPanel.setOpaque(false);

これがうまくいかない場合は、子コンポーネントと親コンポーネントの間でどのようにペイントが行われるかについて、透明度のある背景をチェックしてください。

于 2013-02-01T19:33:46.400 に答える
2

別の方法として、アライメントとアルファを制御するメソッドもあるのsetBackgroundImage()メソッドを検討してください。org.jfree.chart.JFreeChart

于 2013-02-01T21:13:02.040 に答える