java - 连续单击 JButton 两次

标签 java user-interface jbutton

我想知道 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
    }
}

最佳答案

更多上下文会很好,但是您可以轻松地找到一种方法来跟踪按下了哪些按钮,存储您需要的信息(最后按下按钮的实例、按下次数的计数器或包含最后事件的数组) ...)。像这样的东西:

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;
}

结果:

Button test frame

关于java - 连续单击 JButton 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21497120/

相关文章:

java - 如何在工作台中正确使用@InverseRelationShadowVariable

java - 遇到数组问题(涉及用户多个输入)?

C# 从 native 线程修改 UI

java - 使用 MigLayout,为什么 JTable 后面的 JButton 无响应以及如何解决此问题?

java - 使用udp在java和simulink之间传输 double

android - 根据位置缩放 RecyclerView 项目

python - 如何将 Ubuntu 机器限制为 Python GUI?

java - 当我调用 fillRoundRect() 时只有 1 个角是圆的

java - 如何显示插入主面板内子面板中的jbutton?

java - 获取加载到cq5图像组件中的图像的文件大小?