Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

setBackgroundで背景色を指定しても、背景が透明になる

先ほど開発環境を「J2SDK5.0 Update3」から「J2SDK6 Update5」に変えたんですが、
以下のプログラムの実行時に背景色が適用されなくなりました。


/***** JTest.java *****/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JTest extends JFrame{
   /************* コンストラクタ **************/
    public JTest(){
        setSize( 400, 300);         //画面サイズの初期値
        setBackground(Color.white);
       //×ボタンが押されたら,プログラムを終了する
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });
    }
    // paint
    public void paint(Graphics g){
        g.fillRect(100, 100, 100, 100);
    }

    //main
    public static void main(String []args){
        JTest w = new JTest();
        w.setVisible(true);
    }
}


背景が白のウィンドウに、四角形を描画するという単純なプログラムです。

が、実行時に背景が白にならず、
透明(ウィンドウの下にある部分がそのまま透けて背景)になってしまいます。

他の色でも試してみましたが、結果は同じでした。

「Java 背景 透明」や「Java JFrame 透明」などで検索してみたんですが、
背景を透明にする方法等が多数出てくるだけで、
問題の解決に繋がるものはありませんでした。

J2SDK5.0のときはちゃんと動いていたので環境が問題なのかとは思うのですが・・・
何か分かる方いらっしゃいましたらアドバイスお願いします。

3

回答

93346

閲覧

3件の回答

評価

0

JFrameのソースを見ていただければわかると思いますが
updateメソッドがオーバーライドされて背景色の塗りつぶし
がキャンセルされています。
ですので、JFrameの背景色の変更は出来ないかと思われます。

この場合、getContentPane()メソッドを使用して
JFrameに貼り付けて、そのContentPaneの背景色を変えることで
実現できるかと思います。

ただ、paintメソッドを実行するとこのままにしておくと
同じ事象になります。
■を描画したい場合はJFameに新規に作成したJPanelなどを
addして、そのJPanelに描画する方法が一般的かと思います。

評価

0

1)JFrameのpaint()をオーバライドしてはいけない。JPanelのサブクラスを自分で書くこと。
2)JFrameのバックグラウンドをセットしてはいけない。するなら、getContentPane().setBackground(Color.white);

なんか、基礎を勉強せず、むちゃくちゃを書いてるね。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。