我創建了一個應用程序,它包含一個正方形,每次觸及frame的邊緣時都會彈出一個正方形。我沒有問題發起應用程序,問題是我不知道如何創建各種線程以便擁有框架內的多個正方形。 我嘗試了多件事,但我無法弄清楚我應該在哪裏創建線程。 我還注意到,只有當我直接將其添加到框架內而不是當我將它放入JPanel內時,該正方形纔可見。如何用paintComponent()多線程?
Square.java
public class Square extends JComponent implements ActionListener {
int width = 20;
int height = 20;
double y = Math.random() * 360;
double x = Math.random() * 360;
boolean xMax = false;
boolean yMax = false;
boolean xMin = true;
boolean yMin = true;
Rectangle2D.Double square = new Rectangle2D.Double(x, y, width, height);
public Square() {
Timer t = new Timer(2, this);
t.start();
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g);
g2.setColor(Color.BLUE);
g2.fill(square);
x_y_rules();
}
public void x_y_rules() {
if (xMax == true) {
x = x - 0.5;
if (x <= 0) {
xMax = false;
}
} else {
x = x + 0.5;
if (x >= this.getWidth()) {
xMax = true;
}
}
if (yMax == true) {
y = y - 0.5;
if (y <= 0) {
yMax = false;
}
} else {
y = y + 0.5;
if (y >= this.getHeight()) {
yMax = true;
}
}
square.setFrame(x, y, width, height);
}
@Override
public void actionPerformed(ActionEvent arg0) {
repaint();
}
}
App.java
public class App extends JFrame {
public static void main(String[] args) {
JFrame jf = new JFrame();
Square sqr = new Square();
jf.setSize(400, 400);
jf.setVisible(true);
jf.add(sqr);
jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
}
}
這是正常的,儘管我把2時定時器內,廣場上移動很慢?
謝謝。我把x_y_rules()方法ActionListener.The問題內部是,如果一個創建另一個正方形,我將它添加到幀,後者只顯示一個正方形。這就是爲什麼我認爲我應該使用線程。 – TomCa
由於您不使用線程來解決佈局管理器問題,因此您將需要研究佈局管理器。 JFrame contentPane使用BorderLayout,並且當您將組件默認添加到JFrame時,只會顯示最近添加的組件。 –