【问题标题】:Clicking a JButton twice in a row连续两次单击 JButton
【发布时间】:2014-02-02 02:44:03
【问题描述】:

我想知道 java 中是否有内置函数或检查 JButton 是否连续单击两次的方法。不要将这与跟踪 JButton 被单击的次数或双击 JButton 的次数相混淆。我搜索了多个线程,他们似乎都在谈论后者。

如果单击一次名为button1 的按钮,我有以下代码可以工作。我需要一些帮助来调整它,以便在单击按钮两次(即背靠背)时工作。

public void actionPerformed(ActionEvent arg0){
    JButton button1 = (JButton) arg0.getSource();
    if (button1 == button1) {
        //You clicked button1 twice in a row
    }
}

【问题讨论】:

  • 你能多介绍一下你想用这个实现的目标吗?
  • 你可以看看这个example,它试图在按钮的双重“动作”上触发一个方法,但你可以使用一个类似的概念来“捕获”多次点击,直到特定时间段已过去
  • @Madprogrammer,我以前看过那个帖子。它不能解决我的问题,但还是谢谢。
  • button1 == button1 是一个无意义的永远真实的条件。
  • 有没有内置函数,没有。基本概念是您需要在流程中放置一个短暂的延迟,这样如果在延迟到期之前再次触发按钮,它就会被双击......

标签: java user-interface jbutton


【解决方案1】:

更多上下文会很好,但您可以轻松地跟踪已按下的按钮存储您需要的信息(最后按下按钮的实例、按下次数的计数器或包含最后事件的数组...)。比如:

private JButton _lastButtonPressed;    

void actionPerformed(ActionEvent event)
{
    JButton buttonPressed = (JButton) event.getSource();
    if (_lastButtonPressed == buttonPressed)
    {
        //The same button was clicked two+ times in a row
    }
    else
    {
        //code for handling single button presses
    }
    _lastButtonPressed = buttonPressed;
}

更新

这是一个使用上述代码的简单可执行程序。 actionListener 能够知道按钮连续按下了多少次。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class ButtonTestFrame implements ActionListener
{
    public static final void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ButtonTestFrame();
            }
        });
    }

    public ButtonTestFrame()
    {
        _frame = new JFrame();

        _frame.setTitle("Button test frame");

        _textArea = new JTextArea("Press some buttons:\n");
        _textArea.setEditable(false);
        _frame.add(new JScrollPane(_textArea));

        JPanel buttonsPanel = new JPanel(new GridLayout(1, 3, 1, 1));
        _buttonA = new JButton("Button A");
        _buttonA.addActionListener(this);
        _buttonB = new JButton("Button B");
        _buttonB.addActionListener(this);
        _buttonC = new JButton("Button C");
        _buttonC.addActionListener(this);
        buttonsPanel.add(_buttonA);
        buttonsPanel.add(_buttonB);
        buttonsPanel.add(_buttonC);

        _frame.add(buttonsPanel, BorderLayout.SOUTH);

        _frame.setPreferredSize(new Dimension(600,400));
        _frame.pack();
        _frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        _frame.setLocationByPlatform(true);
        _frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent event)
    {
        JButton buttonPressed = (JButton) event.getSource();

        if (_lastButtonPressed == buttonPressed)
        {
            //The same button was clicked two+ times in a row
            count++;
            _textArea.append(buttonPressed.getText() + " has been pressed " + count + " times in a row.\n");
        }
        else
        {
            //code for handling single button presses
            count = 1;
            _textArea.append(buttonPressed.getText() + " has been pressed.\n");
        }
        _lastButtonPressed = buttonPressed;
    }

    private int count = 0;
    private JButton _lastButtonPressed;
    private JButton _buttonA;
    private JButton _buttonB;
    private JButton _buttonC;
    private JTextArea _textArea;
    private JFrame _frame;
}

结果:

【讨论】:

  • 就像我在问题中所说的那样,我不想跟踪已按下的按钮,因为我已经知道要按下哪个按钮。我只想看看一个按钮是背靠背按下还是连续按下两次。 Java中是否有函数可以做到这一点?
  • @Hustl3r28 要知道一个按钮何时被连续按下两次,您可以使用我上面的代码。如果您不想知道某个按钮何时连续按下了两次,则必须更好地解释自己。
  • 它会给你一个 DoesNotWorkException 吗?它怎么不工作?该代码确实有效,并且可以轻松修改以获得您想要的任何特定功能。无法读懂你的想法,而且你似乎不愿意进行适当的讨论,所以祝你好运。
  • 好的,让我编辑我最初的问题,让情况更清楚。
  • 变量_lastButtonPressed是什么意思?
猜你喜欢
  • 2016-09-05
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多