如何停止挥杆计时器

时间:2014-03-27 20:38:08

标签: java swing animation timer actionlistener

我正在开发GUI。这是代码(ActionListener一个Buttontimer一个。我有一个逐个显示的图像列表。按下stop按钮,我应该停止计时器并显示当前图像。在按下next按钮时,我应该显示下一张图像。

这是Progressive Image Transmission上代码的一部分,这意味着按照清晰度(分辨率)的顺序显示每个当前图像。这是侦听器为每个图像执行的处理程序操作。

问题:

  • 单击停止时,计时器不会停止,而是停止动作监听器进一步创建更多计时器。(注意:下一步和停止共享相同的动作监听器)

  • 点击下一步,需要停止当前运行的计时器,并且需要启动一个新的计时器。 (注意:我使用了timer.restart(),但它也没有达到目的)

帮助将不胜感激。

public void actionPerformed(ActionEvent arg0) {
    int threads=0;

    System.out.println("Listening : "+arg0.getActionCommand());
    if(arg0.getActionCommand().equals("Send")){
        stopButton.setEnabled(true);
        nextButton.setEnabled(true);
    }
    else if(arg0.getActionCommand().equals("Stop")){
        timer.stop();
        saveButton.setEnabled(true);
        stopButton.setEnabled(false);
    }
    else if(arg0.getActionCommand().equals("Next")){
        stopButton.setEnabled(true);
        saveButton.setEnabled(false);
        timer.restart();
    }
    try {
        image = ImageIO.read(new File(pathName[imageNo])).getScaledInstance(512,512 , BufferedImage.SCALE_SMOOTH);

    }catch (IOException e) {
        e.printStackTrace();
    }
    senderImage = new ImageIcon(image);
    senderImageLabel.setIcon(senderImage);
    senderFrame.setVisible(true);

    ImageToMatrix(getImage(pathName[imageNo]));
    Compress();
    k=senderMatrix.length-1;
    imageR=Decompress(k);
    imageR=imageR.getScaledInstance(512, 512, BufferedImage.SCALE_SMOOTH);
    receivedImage = new ImageIcon(imageR);
    receiverImageLabel.setIcon(receivedImage);
    receiverFrame.getContentPane().add(BorderLayout.EAST,receiverImageLabel);
    receiverFrame.setVisible(true);

    Handler handler = new Handler();
    timer = new Timer(1000,handler);
    timer.start();
    sendButton.setEnabled(false);

    imageNo = (imageNo+1)%5;
}
class Handler implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
        System.out.println("image: "+imageNo+"  matrix:"+k );
        k-=1;
        imageR=Decompress(k);
        imageR=imageR.getScaledInstance(512, 512, BufferedImage.SCALE_SMOOTH);
        receivedImage = new ImageIcon(imageR);
        receiverImageLabel.setIcon(receivedImage);
        receiverFrame.getContentPane().add(BorderLayout.EAST,receiverImageLabel);
        receiverFrame.setVisible(true);
        if(k==0){
            timer.stop();
        }
    }

}

0 个答案:

没有答案