【问题标题】:nothing happens when i execute the code. Got my methods right? [closed]当我执行代码时没有任何反应。我的方法对了吗? [关闭]
【发布时间】:2013-07-14 17:14:37
【问题描述】:

我有一个代码,我应该在 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);}
    }
}    

【问题讨论】:

  • 请先去拿一本Java书...
  • 听起来你对构造函数不太了解。也许this 会有所帮助。
  • 这是绝对的基本 Java。如果你不知道,那么是的,你不应该在这里问。
  • 好的,谢谢你毁了我的自尊@whowantsakookie
  • 我不是。在问一个简单的问题之前,您应该先了解更多信息。

标签: java methods


【解决方案1】:

如果你真的尝试构造一个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)。

【讨论】:

  • 非常感谢。描述得很好!!!
  • 其实我使用的是 r1,因为我应该有两个矩形,所以我想将另一个命名为 r2,但我删除它只是为了先用一个来完成这项工作。我觉得那样更容易:)
  • @Patricia6946:如果您想要两个实例,请创建两个实例 - 但您不希望 每个 实例都包含另一个实例。您还没有显示 调用 的任何代码 - 但这可能是您想要创建两个实例的位置。
  • @Patricia6946:虽然我不认为需要粗鲁,但你的问题也不是那么清楚。我怀疑如果你花更多的精力去研究它,你可能已经为自己找到了答案。请阅读 tinyurl.com/so-hints - 并记住 Stack Overflow 确实不是从头开始学习语言的好地方。它适用于非常具体的问题,包括初学者问题,但它绝对不能替代一本好书和辛勤工作。
  • 与其告诉你我不知道我在做什么,他可以直接和我说话,而不是用第三人称指代我。而且我不知道如果您是Java新手,则不允许在这里提问。下次最好说:对不起,堆栈溢出不用于帮助解决基本的 java 问题。难的?如果是,那么有些人在这里回答的方式很粗鲁。无论如何谢谢@JonSkeet
猜你喜欢
  • 2022-11-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多