1

JFrames で遊んでいますが、JFrame の背景色を設定しようとすると機能しません。私の知る限り、JFrame の contentpane で背景色を設定する必要があります。その場合、なぜこれが機能しないのかわかりません。

class drawCircles extends JFrame{
int [][] s;
Container c;
public drawCircles(int [][]circleArray){
    super();
    setSize(400, 400);
    getContentPane().setBackground(Color.YELLOW);

    s=circleArray;
    show();
}

編集:はい、ペイント()をオーバーライドしました

public void paint (Graphics g){
    int width=this.getHeight()/10;
    int start=width;
    int endY=this.getHeight()-width;
    int endX=this.getWidth()-width;

    for(int i=0; i<s.length; i++){
        g.drawLine(i*width, start, i*width, endY);
        //g.drawLine(start, i*width, endX, i*width);

    }
    //g.drawRect(start, start, width*s.length,width*s.length);

    for(int i=0; i<s.length; i++){
        for(int j=0; j<s.length; j++){
            switch(s[i][j]){
            case 0: g.setColor(new Color(252, 177, 177));break;
            case 1: g.setColor(new Color(250, 165, 165));break;
            case 2: g.setColor(new Color(242, 156, 156));break;
            case 3: g.setColor(new Color(224, 133, 133));break;
            case 4: g.setColor(new Color(208, 117, 117));break;
            case 5: g.setColor(new Color(199, 107, 107));break;
            case 6: g.setColor(new Color(191, 98, 98));break;
            case 7: g.setColor(new Color(181, 88, 88));break;
            case 8: g.setColor(new Color(171, 79, 79));break;
            case 9: g.setColor(new Color(161, 71, 71));break;
            default:g.setColor(Color.white);

            }
            g.fillOval(j*width, i*width, width, width);
        }
    }
4

2 に答える 2

3

JFrame の paint メソッドをオーバーライドしないでください。限目。これが、JFrame のスーパー オブジェクトに必要な描画を許可していないため、現在のコードが機能しない理由です。

スーパーのメソッドを追加すると、問題が解決する可能性があります。

public void paint (Graphics g) {
  super.paint(g);
  //... your code

ペイントは、子オブジェクトや境界線のペイントなど、コンポーネントのペイントよりも多くのことを担当するため、これを行うべきではありません。

JPanel の paintComponent をオーバーライドし、オーバーライドで必ずsuper.paintComponent(...)メソッドを呼び出すことをお勧めします。さらに重要なことは、Java Swing グラフィックスのチュートリアルを読むことです。

于 2013-09-15T15:23:46.763 に答える
3
  • カスタム描画はpaint()、Swing JComponentspaintComponent()の代わりに で行われます。public drawCircles(int [][]circleArray){

  • に直接描画しないでください。オーバーライドしてTop-Level Containersそこに配置し、JPanelpaintComponent()getPreferredSize(otherwise is there zero dimension)

  • 基本はOracleチュートリアル2Dグラフィックスで説明されている非常に良いです

于 2013-09-15T15:24:15.627 に答える