如何使用触摸屏使Java JButton直观地按下?

如何使用触摸屏使Java JButton直观地按下?,java,swing,jbutton,touchscreen,Java,Swing,Jbutton,Touchscreen,我有一个简单的Swing GUI,在带有触摸屏的平板电脑上运行JButtons。按钮具有ActionListeners。当鼠标点击这些按钮时,它们会正确地按下。但是,当在触摸屏上点击它们时,它们在视觉上保持不变,但仍会发出一个actionPerformed()。如果它们被双击,则可以正确地目视按下,但会触发2actionPerformed()s 有没有办法在按下按钮而不是单击按钮时使此按钮动画更改发生?我已经测试过了,我可以使用一个MouseListener将我所有的逻辑放在mouseClick

我有一个简单的Swing GUI,在带有触摸屏的平板电脑上运行JButtons。按钮具有
ActionListeners
。当鼠标点击这些按钮时,它们会正确地按下。但是,当在触摸屏上点击它们时,它们在视觉上保持不变,但仍会发出一个
actionPerformed()
。如果它们被双击,则可以正确地目视按下,但会触发2
actionPerformed()
s


有没有办法在按下按钮而不是单击按钮时使此按钮动画更改发生?我已经测试过了,我可以使用一个
MouseListener
将我所有的逻辑放在
mouseClicked()
中,但是要求触摸屏用户双击一个按钮不是很优雅。

你的问题是,尽管鼠标点击是一个复合事件,但触摸屏却不是。因此,它不可能在第一个事件中下降,在第二个事件中再次上升

但是,当您收到触摸事件时,您可以做的是更改按钮的视觉状态,使其看起来被按下(使用
setPressed(true)
),然后将计时器设置为100ms左右,并在计时器过期时将状态设置回正常状态(使用
setPressed(false)


小心计时器过期:您需要在UI线程上执行
setPressed(false)
。因此,您需要使用
SwingUtilities.invokeLater()
作为对
setPressed
的第二次调用的包装。或者,使用
javax.swing.Timer
作为第二次调用的排队方式;它需要延迟和
操作
,并且
操作
在UI线程上执行。

1。出于测试目的,2。不知道问题遗漏了重要的细节,下面是一些使用触摸屏的用户,3。重要的是使用L&F,4。投票结束的范围太广这是一个非常清楚、具体、写得很好的问题。它在发布后的前半小时内获得了10张选票。这里有太多下意识的好问题。不,我没有任何问题,也没有JButtons PaintingHanks的问题,我将尝试一下,看看我如何使用这种方法。