我应该制作一个屏幕保护程序应用程序,该应用程序每五秒钟绘制一定数量的随机线条,并且我们应该包含一个UI,以允许用户输入他们想要绘制的线条数量。我认为滑块是最简单的,但是我无法让滑块更改在绘制线条的循环中使用的lines变量的值。无论我把滑块放在哪里
public class Q4 extends JComponent implements ActionListener, ChangeListener{
private Random rand=new Random();
private Timer time=new Timer(5000,this);
private int lines;
JSlider line=new JSlider(0,500);;
public Q4(){
JFrame frame=new JFrame();
frame.setSize(1080,720);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(this);
JSlider line=new JSlider(0,500);
line.addChangeListener(this);
line.setMajorTickSpacing(50);
line.setMinorTickSpacing(25);
line.setPaintTicks(true);
line.setPaintLabels(true);
frame.add(line, BorderLayout.NORTH);
}
@Override
public void paintComponent(Graphics g) {
time.start();
int x=0;
while(x<lines) {
int x1=rand.nextInt(getWidth())+1;
int y1=rand.nextInt(getHeight())+1;
int x2=rand.nextInt(getWidth())+1;
int y2=rand.nextInt(getHeight())+1;
g.drawLine(x1, y1, x2, y2);
x++;
}
System.out.println(lines);
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
@Override
public void stateChanged(ChangeEvent e) {
lines=line.getValue();
}
答案 0 :(得分:0)
private int lines;
JSlider line=new JSlider(0,500);;
public Q4(){
...
JSlider line=new JSlider(0,500);
问题是您有两个滑块,一个是实例变量,一个是局部变量。您将侦听器添加到本地变量,但是您的侦听器只能访问实例变量。
摆脱局部变量。
其他问题:
不要在绘画方法中启动计时器。绘画方法仅用于绘画。计时器应该在构造函数中启动
在将所有组件添加到面板之后,应调用setVisible(true)
您的课程不应创建框架。您的自定义组件是一个独立的组件,在构造函数中创建框架与您的组件无关。该框架应使用用于测试代码的public static void main()
方法创建。