我正在NetBeans平台上开发Java桌面应用程序。我有几个JFrame,在这些帧中有几个JButton。
我的应用程序将运行在触摸屏上,如工业PC,基于Linux的面板PC等。因此,我需要使用长按事件的按钮。
如何处理JButton?的长新闻事件单击事件是可以的,但我找不到任何关于长按/长点击的引用或示例。
发布于 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‘的长度。
发布于 2019-05-17 14:36:38
这个密码对我有用。
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:
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");
}
});https://stackoverflow.com/questions/23872483
复制相似问题