对按钮使用动作侦听器

bob9123

代码:Java Sphere类

 import javax.swing.*;
 import java.awt.*;
 import java.awt.geom.Ellipse2D;

public class Sphere extends JPanel {
private boolean flashinglights = false;
private int x = 168;
private int y = 75;


public void paintComponent(Graphics g) { 
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    if (flashinglights) { //This is the flash option. Here it should change between grey and orange
        g2.setColor(Color.ORANGE);
        Ellipse2D.Double ball = new Ellipse2D.Double(x, y, 50, 50);
        g2.draw(ball);
        g2.fill(ball);
    } else {
        g2.setColor(Color.gray); //This should stay grey as it does now.
        Ellipse2D.Double ball = new Ellipse2D.Double(x, y, 50, 50);
        g2.draw(ball);
        g2.fill(ball);
    }
}

public void chooseflashinglights(){ //Ignore these methods
    flashinglights = false;
}

public void choosesteady(){
    flashinglights = true;
}

public void flickerorange(int d) { y = y + d; }


public void flickergrey(int d) { y = y + d; }


public static void main(String[] args) {
    JFrame scFrame = new AnimationViewer();
    scFrame.setTitle("Circle");
    scFrame.setSize(400, 400);
    scFrame.setDefaultCloseOperation((JFrame.EXIT_ON_CLOSE));
    scFrame.setVisible(true);
}

}

动画查看器类:

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;


public class AnimationViewer extends JFrame {
JButton jbtFlash = new JButton("Flash");
JButton jbtSteady = new JButton("Steady");
JPanel bPanel = new JPanel();
Sphere sphPanel = new Sphere();
Timer timer;

public AnimationViewer() {
    this.add(bPanel, BorderLayout.SOUTH);
    bPanel.add(jbtFlash);
    bPanel.setLayout(new GridLayout(1,2));
    bPanel.add(jbtSteady);

    this.add(sphPanel, BorderLayout.CENTER);


    jbtSteady.addActionListener(new SteadyLights());
    jbtFlash.addActionListener(new FlashingLights());

    timer = new Timer(100, new TimerListener());
    timer.start();
}



class TimerListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        sphPanel.flickerorange(0);
        sphPanel.flickergrey(0);
        repaint();
    }
}
class FlashingLights implements ActionListener{
    public void actionPerformed(ActionEvent e){
        sphPanel.chooseflashinglights();
    }
}
class SteadyLights implements ActionListener{
    public void actionPerformed(ActionEvent e){
        sphPanel.choosesteady();
    }
}

}

因此,现在屏幕上会出现一个球体。下面显示了两个按钮。快闪且稳定。在稳定按钮上,它必须保持一种颜色(橙色),而没有。

现在,在Flash中,它必须每100毫秒从橙色更改为灰色。

我知道它与Action侦听器有关,但是我究竟该如何实现呢?

丹尼尔·库普佐(DanielKupčo)

您有很多额外的代码。我会这样做。在paintComponent方法中编写闪烁逻辑。然后仅创建一个计时器。勾选时,每100毫秒调用一次paintComponent方法。在Flash按钮上,单击启动计时器,在稳定按钮上,单击停止计时器,并一次调用paintComponent。

球类:

public class Sphere extends JPanel {
private boolean flashinglights = false;
private int x = 168;
private int y = 75;
private Color[] colors = new Color[] {Color.ORANGE, Color.GRAY };
private int colorIndex = 0;

public void paintComponent(Graphics g) {
   super.paintComponent(g);
   Graphics2D g2 = (Graphics2D) g;
   if (!flashinglights) {
       g2.setColor(Color.ORANGE);
       Ellipse2D.Double ball = new Ellipse2D.Double(x, y, 50, 50);
       g2.draw(ball);
       g2.fill(ball);
   } else {
       if(colorIndex > colors.length - 1)
           colorIndex = 0;

       g2.setColor(colors[colorIndex++]);
       Ellipse2D.Double ball = new Ellipse2D.Double(x, y, 50, 50);
       g2.draw(ball);
       g2.fill(ball);
   }
}

public void chooseflashinglights(){ //Ignore these methods
   flashinglights = true;
}

public void choosesteady(){
   flashinglights = false;
}

public static void main(String[] args) {
   JFrame scFrame = new AnimationViewer();
   scFrame.setTitle("Circle");
   scFrame.setSize(400, 400);
   scFrame.setDefaultCloseOperation((JFrame.EXIT_ON_CLOSE));
   scFrame.setVisible(true);
}

}

AnimationViewer类:

public class AnimationViewer extends JFrame {
JButton jbtFlash = new JButton("Flash");
JButton jbtSteady = new JButton("Steady");
JPanel bPanel = new JPanel();
Sphere sphPanel = new Sphere();
Timer timer;

public AnimationViewer() {
   this.add(bPanel, BorderLayout.SOUTH);
   bPanel.add(jbtFlash);
   bPanel.setLayout(new GridLayout(1,2));
   bPanel.add(jbtSteady);

   this.add(sphPanel, BorderLayout.CENTER);

   timer = new Timer(100, new TimerListener());
   jbtSteady.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            sphPanel.choosesteady();
            timer.stop();
            sphPanel.repaint();
        }
    });
   jbtFlash.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            sphPanel.chooseflashinglights();
            timer.start();
        }
    });

}

class TimerListener implements ActionListener {
   public void actionPerformed(ActionEvent e) {
       sphPanel.repaint();
   }
}

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章