我創建了一個程序,該程序應該在每次單擊(隨機大小和隨機顏色)時繪製一個圓,並且每個圓都將成爲一個對象。我不知道發生了什麼,但我的代碼不起作用,我很確定我幾乎在那裏。用對象重繪我的面板
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class Circle
{
private JFrame frame;
CircleObj circleObj;
Random rand;
int rColor;
int gColor;
int bColor;
int radius;
public static void main (String [] arg)
{
frame = new JFrame("Circles");
frame.setBounds(200, 100, 600, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel top = new JPanel();
rand = new Random();
top.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
int xstart = e.getX();
int ystart = e.getY();
rColor = rand.nextInt(256);
gColor = rand.nextInt(256);
bColor = rand.nextInt(256);
radius = rand.nextInt(20);
circleObj = new CircleObj(xstart, ystart, rColor, gColor, bColor, radius);
repaint();
}
});
frame.add(top, BorderLayout.CENTER);
frame.setVisible(true);
}
}
,這裏是我的CircleObj類
import javax.swing.*;
import java.awt.*;
public class CircleObj extends JPanel
{
private int xVal;
private int yVal;
private int red;
private int green;
private int blue;
private int circleRadius;
public CircleObj (int x, int y, int r, int g, int b, int rad)
{
xVal = x;
yVal = y;
red = r;
green= g;
blue = b;
circleRadius = rad;
}
public void paintComponent (Graphics g) {
super.paintComponent(g);
g.setColor(new Color(red, green, blue));
g.fillOval(xVal,yVal,circleRadius,circleRadius);
}
}
@ iali87由於這個答案顯示,有大量的工作要做。我建議把它分解成小塊。例如,您可能想要先在JPanel上繪製**一個**圓圈。圓的位置和大小應該先硬編碼,以保持容易。實際上,在沒有** CircleObj類的情況下繪製一個圓**,然後在以後添加它。從那裏添加一些更復雜的東西。一次添加一點點,直到完成項目。 – 2014-10-01 04:49:35
@Hovercraft全部的鰻魚首先謝謝你...我根據你的建議創建了代碼......我不確定如何將每個點擊的顏色存儲到對象的ArrayList中。 – iali87 2014-10-01 05:04:55
@ iali87:您需要在MouseListener中執行此操作。你甚至可以給JPanel繪圖一個方法 - 「addCircle(Point p)」,並在其中讓繪圖面板從鼠標點創建一個新的Circle,然後從MouseListener中調用該方法。堅持下去,你就會得到它,但是不要猜測並且不要在第一次思考邏輯時拋出代碼,否則你最終會得到上面發佈的代碼。 – 2014-10-01 05:09:00