2017-06-08 11 views
1

の背景色を変更:、私は円を描きたい行をのJPanel - エラー、私は次のコードで書かれているのJPanel

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Test extends JFrame{ 

    public Test() { 
     this.setTitle("Test"); 
     this.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 

     JPanel jPanel = new JPanel() { 
      public void paint(Graphics g) { 
       g.setColor(Color.GREEN); 
       g.fillOval(100, 100, 100, 100); 
       g.setColor(Color.BLACK); 
       g.drawLine(0, 0, 100, 100); 
      } 
     }; 
     jPanel.setSize(500, 500); 
     jPanel.setBackground(Color.RED); 
     this.add(jPanel); 
     this.setVisible(true); 
     this.setSize(500, 500); 
    } 

    public static void main(String[] args) { 
     Test test = new Test(); 
    } 
} 

を、そして赤に、画面の背景色を変更するが、私プログラムを実行すると、画面は次のようになります。 Screen

コードのエラーはどこですか?タンク

答えて

3

最初に、paintではなく、paintComponentを上書きしないでください。

その後、setBackgroundのJavadocは言う:JComponent内の

直接のサブクラスは このプロパティを称えるためにpaintComponentをオーバーライドする必要があります。

ですから、親クラスのpaintComponentを呼び出さない限り、この方法は、あなたのケースでは、それ自体で何もしません(または背景を自分でペイントし、それはやり過ぎだろう)を呼び出します。

いずれの場合でも、親実装ではクリーニングやその他の便利な操作が行われる可能性があるため、super.paintComponentに連絡することをお勧めします。ここで

のアカウントにこのすべてを取り、あなたのコードの修正版です:

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Test extends JFrame { 

    public Test() { 
     this.setTitle("Test"); 
     this.addWindowListener(new WindowAdapter() { 
      public void windowClosing(final WindowEvent e) { 
       System.exit(0); 
      } 
     }); 

     JPanel jPanel = new JPanel() { 
      @Override 
      public void paintComponent(final Graphics g) { 
       // call parent method 
       super.paintComponent(g); 

       // OR paint background yourself : 
       // g.setColor(getBackground()); 
       // g.fillRect(0, 0, getWidth(), getHeight()); 


       // paint other things 
       g.setColor(Color.GREEN); 
       g.fillOval(100, 100, 100, 100); 
       g.setColor(Color.BLACK); 
       g.drawLine(0, 0, 100, 100); 
      } 
     }; 
     jPanel.setSize(500, 500); 
     jPanel.setBackground(Color.RED); 
     this.add(jPanel); 
     this.setVisible(true); 
     this.setSize(500, 500); 
    } 

    public static void main(final String[] args) { 
     Test test = new Test(); 
    } 
} 
+0

は、Java GUIの開発について学ぶためにあらゆる書籍、Webページ、または別のリソースをお勧めします、助けてくれてありがとう! – Lemark

+0

@目印:オラクルのチュートリアルは良いスタートです:http://docs.oracle.com/javase/tutorial/uiswing/ – Berger

関連する問題