首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JButton长新闻事件

JButton长新闻事件
EN

Stack Overflow用户
提问于 2014-05-26 14:33:56
回答 2查看 2.3K关注 0票数 2

我正在NetBeans平台上开发Java桌面应用程序。我有几个JFrame,在这些帧中有几个JButton

我的应用程序将运行在触摸屏上,如工业PC,基于Linux的面板PC等。因此,我需要使用长按事件的按钮。

如何处理JButton?的长新闻事件单击事件是可以的,但我找不到任何关于长按/长点击的引用或示例。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-26 14:45:23

如果您决定让您的实现使用JButton,您应该意识到通常不会对它们使用“单击事件”(尽管理论上可以使用某种MouseListener组合来实现这一点)--所有AbstractButton子类都有一个ActionListener队列来处理激活按钮的默认平台事件。因此,您应该专注于操作而不是“单击”。

http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#abstractbutton

http://docs.oracle.com/javase/7/docs/api/javax/swing/Action.html#buttonActions

如果您确实希望监视JButton对象上的长新闻事件,请向ActionListener中添加一个计时器,例如通过System.currentTimeMillis(),以检查操作之间的时间差和/或使用MouseListener (所有java.awt.Component子类都定义了addMouseListener() )和mousePressed/mouseReleased度量来获取时间增量,以便您能够检测出' press‘的长度。

票数 0
EN

Stack Overflow用户

发布于 2019-05-17 14:36:38

这个密码对我有用。

代码语言:javascript
复制
abstract class MouseCustomAdapter extends MouseAdapter {
    private long mousePressedTime;
    private long delay = 1000;
    private Timer flashTimer;
    private Color originalForegroungColor;

    public MouseCustomAdapter() {}
    public MouseCustomAdapter(long delay) {
        this.delay = delay;
    }

    @Override
    public void mousePressed(MouseEvent e) {
        mousePressedTime = e.getWhen();
        if(flashTimer != null)
            flashTimer.cancel();
        flashTimer = new Timer("flash timer");
        flashTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                originalForegroungColor = e.getComponent().getForeground();
                e.getComponent().setForeground(Color.LIGHT_GRAY);
            }
        }, delay);
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        flashTimer.cancel();
        e.getComponent().setForeground(originalForegroungColor);
        if(e.getWhen() - mousePressedTime > delay)
            longActionPerformed(e);
        else
            shortActionPerformed(e);
    }

    public abstract void shortActionPerformed(MouseEvent e);
    public abstract void longActionPerformed(MouseEvent e);
}

扩展实现shortActionPerformed和longActionPerformed的适配器。Es:

代码语言:javascript
复制
    menuButton.addMouseListener(new MouseCustomAdapter() {
        @Override
        public void shortActionPerformed(MouseEvent e) {
            System.out.prinln("Pressed short");
        }

        @Override
        public void longActionPerformed(MouseEvent e) {
            System.out.prinln("Pressed long");
        }
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23872483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档