在这个程序中,我想绘制一系列相互作用形成网络的线条。每次计时器滴答时,都会绘制一条线。因此,我无法在super.paintComponent(g)
中进行paintComponent()
调用,因为我需要显示之前的行。但是,我想设置背景颜色,据我所知,只有在首次进行超级调用时才能调用setBackground()
方法。我不确定fillRect
方法是否有效,因为它每次都会在旧行上绘制一个矩形。我尝试在构造函数中使用setBackground()
方法,但它也不起作用。
这是我的代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class prettyWebPanel extends JPanel implements ActionListener {
Timer time = new Timer(100,this);
private Color colour1 = Color.black;
private Color colour2 = Color.white;
JButton start = new JButton("Start");
int j = 0;
public prettyWebPanel() {
setPreferredSize(new Dimension (550,550));
this.add(start);
start.addActionListener(this);
setBackground(colour1);
}
public void paintComponent(Graphics g) {
setBackground(colour1);
setForeground(colour2);
if (j<490) g.drawLine(20, 20+j, 20+j, 500);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == start) time.start();
else if (e.getSource() == time) {
j+=10;
repaint();
}
}
}
答案 0 :(得分:2)
因为我需要显示前面的行。
然后你需要做增量绘画。有关实现此目的的两种常用方法,请参阅Custom Painting Approaches:
List
个对象进行绘制和重绘
BufferedImage
。