UPDATE 19/01/14(對於像這樣的問題的人) 我所描述的問題起源於我的circle類擴展了JPanel的事實。所以我從這個班級創建的每個圈子其實都是它自己的面板。因此,通過添加布局,我可以看到兩個圓圈。現在我瞭解到,它的Wiser有一個擴展JPanel的單獨的「板級」,在這種情況下讓這個圈子什麼都沒有擴展。這樣我就可以在circleclass中實現一個drawMySelf方法,並將它們繪製在我的棋盤上。這樣我可以在同一個面板中有各種幾何對象!:) UPDATE END。瞭解paintComponent
即時進行一項任務,我需要繪製兩個圓圈。當我調整幀大小時,這些圈子應該隨機重新定位。並且需要在他們的中心之間建立一條線來說明距離。我正在爲我的班級在圈子中遇到麻煩。當我將我的自定義圈添加到我的測試程序時,只有其中一個出現。我不知道爲什麼..我認爲我的代碼中的一個錯誤使程序跳過一些。因爲我只有一個圓圈出現。任何人都可以看到這段代碼有什麼問題嗎?
請記住我應該使用我迄今爲止學到的工具。 JPanel,JFrame,覆蓋paintComponent()。
Circle類:
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);
}
}
嘗試改變他們的一個定位。我有一種感覺,他們互相重疊。 'g.drawOval(randomWidth,randomHeight,30,30);'。把30,30改成別的東西,看看會發生什麼。 –
我將它改爲g。drawOval(randomWidth,randomHeight,90,90); 仍然只是一個圓圈。 Althoug從這個代碼中出現了它的RED圓圈。我也試圖改變其他圈子的起始位置,但是這也沒有幫助。 – Surangie