更新 19/01/14(对于有类似问题的人)
我在下面描述的问题源于我的 circle 类扩展了 JPanel 的事实。所以我从这个类创建的每个圆圈实际上都是它自己的面板。因此,通过添加布局,我可以看到两个圆圈。我现在了解到,它更聪明的是有一个单独的“板类”来扩展 JPanel,并且在这种情况下,让圆圈什么都不扩展。这样我就可以在 circleclass 中实现一个 drawMySelf 方法并将它们绘制在我的板上。这样我就可以在同一个面板中拥有各种几何对象!
更新结束。
我正在做一个需要画两个圆圈的任务。当我调整框架大小时,这些圆圈应该随机重新定位。并且需要在它们的中心之间有一条线来说明距离。我的圈子课遇到了麻烦。当我将自定义圈子添加到我的测试程序时,只出现其中一个。我不知道为什么。我认为我的代码中有一个错误,使程序跳过了一些错误。因为我只会出现一个圆圈。谁能看到这段代码有什么问题?
请记住,我应该使用到目前为止所学的工具。JPanel,JFrame,覆盖paintComponent()。
圈类:
package oppgave4;
import javax.swing.*;
import java.awt.*;
public class Circle extends JPanel {
public static final int OVAL = 1;
public static final int ANOTHEROVAL = 2;
public int OVALCENTER = 0;
public int ANOTHEROVALCENTER = 0;
private int type = 1;
private boolean filled = false;
public Circle(){
}
public Circle(int type){
this.type = type;
}
public Circle(int type, boolean filled){
this.type = type;
this.filled = filled;
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
int randomWidth = (int)(width * Math.random());
int randomHeight = (int)(height * Math.random());
switch (type){
case OVAL:
g.setColor(Color.BLUE);
if(filled)
g.fillOval(randomWidth, randomHeight, 30, 30);
else
g.drawOval(randomWidth, randomHeight, 30, 30);
case ANOTHEROVAL:
g.setColor(Color.RED);
if(filled)
g.fillOval(randomWidth, randomHeight, 30, 30);
else
g.drawOval(randomWidth, randomHeight, 30, 30);
break;
}
}
}
和测试程序:当我运行这个时,只会出现红色圆圈。
package oppgave4;
import javax.swing.*;
import java.awt.*;
public class TestProgram extends JFrame {
public TestProgram(){
add(new Circle(Circle.OVAL));
add(new Circle(Circle.ANOTHEROVAL));
}
public static void main(String[] args) {
TestProgram sirkel = new TestProgram();
sirkel.setSize(400, 300);
sirkel.setLocationRelativeTo(null);
sirkel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sirkel.setVisible(true);
}
}