Java 线程和图形
我正在制作一个带有棋盘(如棋盘,大小为m x n)的小程序,每个字段必须位于不同的线程中,并且必须每秒更改颜色,直到我将其关闭。我该怎么处理这个?我不能把Java 线程和图形,java,multithreading,graphics,Java,Multithreading,Graphics,我正在制作一个带有棋盘(如棋盘,大小为m x n)的小程序,每个字段必须位于不同的线程中,并且必须每秒更改颜色,直到我将其关闭。我该怎么处理这个?我不能把g.setColor或g.fillRect放在run方法中。是否有任何方法可以使用paintComponent方法,在每个字段的单独线程中,每秒绘制整个内容并更改颜色 小程序: import javax.swing.JApplet; public class MyApplet extends JApplet { public voi
g.setColor
或g.fillRect
放在run方法中。是否有任何方法可以使用paintComponent
方法,在每个字段的单独线程中,每秒绘制整个内容并更改颜色
小程序:
import javax.swing.JApplet;
public class MyApplet extends JApplet {
public void init() {
add(new Board( Integer.parseInt(getParameter("m")),
Integer.parseInt(getParameter("n")),
Integer.parseInt(getParameter("k")),
Integer.parseInt(getParameter("p"))
));
}
}
董事会:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
import java.net.*;
import java.util.Random;
class NowyWatek extends Board implements Runnable{
public NowyWatek(){
super(0, 0, 0, 0);
}
public void run(){
Random random=new Random();
int r1=random.nextInt(255)+0;
int r2=random.nextInt(255)+0;
int r3=random.nextInt(255)+0;
g.setColor(r1, r2, r3);
}
}
public class Board extends JPanel {
int m,n,k,p;
public Board (int m, int n, int k, int p) {
super();
this.m = m;
this.n = n;
this.k = k;
this.p = p;
}
public void paintComponent(Graphics g)
{
int a=0, b=0;
for(int i=0; i<m*n;i++)
{
NowyWatek nowywatek=new NowyWatek();
Thread thread=new Thread(nowywatek);
thread.start();
g.fillRect(a,b,29,29);
a+=30;
if(i%n==n-1)
{
a=0;
b+=30;
}
}
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.applet.*;
导入java.net。*;
导入java.util.Random;
类NowyWatek扩展板实现Runnable{
公共NowyWatek(){
超级(0,0,0,0);
}
公开募捐{
随机=新随机();
int r1=random.nextInt(255)+0;
int r2=random.nextInt(255)+0;
int r3=random.nextInt(255)+0;
g、 setColor(r1、r2、r3);
}
}
公共课程委员会扩展JPanel{
int m,n,k,p;
公共董事会(整数m、整数n、整数k、整数p){
超级();
这个,m=m;
这个,n=n;
这个。k=k;
这个,p=p;
}
公共组件(图形g)
{
int a=0,b=0;
对于(int i=0;i
它必须每秒钟改变一次颜色,直到我把它关掉。我该怎么做呢
创建更新颜色并调用组件上的repaint
保留对在(1)中更改的颜色对象的引用
将颜色对象从(2)传递到g.setColor
中的paintComponent
例如:
Color color = Color.WHITE;
Random random = new Random();
....
Timer timer = new Timer(1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
int r1=random.nextInt(255);
int r2=random.nextInt(255);
int r3=random.nextInt(255);
color = new Color(r1, r2, r3);
repaint();
}
});
timer.start();
...
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(color);
...
}
我不建议每次调用paintComponent时都创建一个新线程。如果希望定期(和定时)更改组件的绘制方式,请使用,更改需要更改的数据并调用repaint