当我执行代码时没有任何反应。我的方法对了吗?

时间:2013-07-14 17:14:38

标签: java methods

我有一个代码,我应该在JPanel上返回矩形区域和周边。但是当我执行时根本没有任何事情发生。我怀疑在我的方法某处出现错误,我相信其余的都可以。生病了所有的帮助。 我只是要在JPanel中向您展示我的代码。

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Rektanglar extends JPanel {

    Rektanglar r1 = new Rektanglar ();

    @Override
    public void paintComponent (Graphics g) {    
       super.paintComponent (g);
       g.drawString ("Rektanglar",10,20);
       this.setBackground(Color.WHITE);
       g.setColor(Color.BLUE);
       g.fillRect(r1.getX(),r1.getY(), r1.getWidth(), r1.getHeight());
    }

    public int Y; 
    public int X; 
    public int width; 
    public int height; 
    public int Perimeter; 
    public int Area; 

    Rektanglar (){ 
        width = 10; 
        height = 10; 
        X = 0; 
        Y = 0;        
    }     

    public void Rectangle(int x, int y, int w, int h) {
        X = x;
        Y = y;
        width = w;
        height = h;
    }

    public void setX(int X ){ 
        this.X = X;
    }

    public int getX(int X){
        return X;
    }

    public void setY(int Y){
        this.Y = Y;
    }

    public int getY( int Y){
        return Y;
    }

    public int getWidth( int width){
        return width;
    } 

    public int getHeight(int height){
        return height;
    }

    public int getPerimeter(){
        return (width + width + height + height );
    }

    public int getArea(){
        return (height * width);}
    }
}    

1 个答案:

答案 0 :(得分:4)

如果您实际上尝试构造Rektanglar的实例,则会因此而出现堆栈溢出:

public class Rektanglar extends JPanel {
   Rektanglar r1 = new Rektanglar ();
   ...
}

该代码表示​​,为了创建一个实例,您需要创建另一个实例...这将创建另一个实例,等等。

根本不清楚为什么你有r1,但我强烈建议你摆脱它......

我也怀疑这个:

public void Rectangle(int x, int y, int w, int h) {
    X = x;
    Y = y;
    width = w;
    height = h;
}

...意味着是一个构造函数,在这种情况下你必须把它写成:

public Rektanglar(int x, int y, int w, int h) {
    X = x;
    Y = y;
    width = w;
    height = h;
}

请注意,名称必须与类的名称相匹配,而未指定返回类型。

另外,我建议:

  • 您将所有字段设为私有
  • 您可以从宽度和高度计算周长和面积,而不是将它们保留为字段
  • 您遵循变量的Java命名约定(xy而不是XY)。