-1

在这个程序中,我想绘制一系列交互形成网络的线条。每次计时器滴答作响,都会画一条线。因此,我不能在中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();
    }
  }
}
4

1 回答 1

2

因为我需要出现前面的行。

然后你需要做增量绘画。有关执行此操作的两种常见方法,请参阅自定义绘画方法:

  1. 保留一个List对象来绘制并每次重新绘制它们
  2. BufferedImage.
于 2014-05-24T03:21:52.647 回答