问题描述
所以基本上我有一个矩形类,我想实现一个方法,在绘制矩形后更改其颜色。
到目前为止,这是我的代码。以为它可能像更改对象的位置一样起作用,但是没有。
public class rectangle extends JPanel(){
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.red)
g.fillRect(0,30,30);
}
public void recolor(){
Color.blue;
repaint();
}
}
解决方法
您可以执行以下操作
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();
}
},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,getWidth(),getHeight());
}
public void recolor() {
Random r = new Random();
color = new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256));
repaint();
}
}
,
不要保留硬编码值。使用Swing组件时,它们具有允许您动态更改属性的方法。
例如,所有组件都具有以下方法:
- setFont(...)
- setBorder(...);
- setBackground(...);
- setForeground(...);
在您的情况下,您甚至不需要自定义方法。在您的应用程序代码中,您可以使用:
someComponent.setForeground( Color.BLUE );
然后在您的绘画代码中使用:
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
//g.setColor(Color.red)
g.setColor( getForeground() );
g.fillRect(0,30,30);
}
如果您不想使用前景色属性,则可以在代码中添加自定义属性。基本步骤是
- 创建类似setColor(Color color)的方法
- 创建实例变量“ color”以将属性保存在您的类中
- 自定义绘画代码以使用“颜色”属性
以上3个步骤适用于要添加到您的班级的任何自定义属性。