Java 我怎样才能回忆起一个长方形呢?
所以基本上我有一个矩形类,我想实现一个方法,在它已经被绘制之后改变它的颜色 这是到目前为止我的代码。我认为这可能像改变一个物体的位置一样有效,但事实并非如此Java 我怎样才能回忆起一个长方形呢?,java,swing,colors,rectangles,repaint,Java,Swing,Colors,Rectangles,Repaint,所以基本上我有一个矩形类,我想实现一个方法,在它已经被绘制之后改变它的颜色 这是到目前为止我的代码。我认为这可能像改变一个物体的位置一样有效,但事实并非如此 public class rectangle extends JPanel(){ @Override protected void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.red) g.fillRect(0, 0, 30,
public class rectangle extends JPanel(){
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.red)
g.fillRect(0, 0, 30, 30);
}
public void recolor(){
Color.blue;
repaint();
}
}
不要保留硬编码值。当您使用Swing组件时,它们具有允许您动态更改属性的方法 例如,所有组件都有如下方法:
someComponent.setForeground( Color.BLUE );
然后在绘制代码中使用:
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
//g.setColor(Color.red)
g.setColor( getForeground() );
g.fillRect(0, 0, 30, 30);
}
如果不想使用“前景色”属性,则可以向代码中添加自定义属性。基本步骤是
上述3个步骤适用于要添加到类中的任何自定义属性。您可以执行以下操作 Main.java
import java.awt.Dimension;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) throws InterruptedException {
SwingUtilities.invokeLater(new Runnable() { //do some research about SwingUtilities.invokeLater
@Override
public void run() {
JFrame frame = new JFrame();
JPanel panel = (JPanel) frame.getContentPane();
Rectangle rectangle = new Rectangle();
panel.add(rectangle);
frame.setPreferredSize(new Dimension(400, 400));
frame.pack();
frame.setVisible(true);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
rectangle.recolor();
}
}, 0, 1000); // 0 = initial delay, 1000 = intervall
}
});
}
}
Rectangle.java
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;
public class Rectangle extends JPanel {
private Color color;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(color);
g.fillRect(0, 0, getWidth(), getHeight());
}
public void recolor() {
Random r = new Random();
color = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));
repaint();
}
}