是否可以在平板电脑上的Java Swing应用程序中获取JButton的反馈?
我正在使用Windows 8,如果我将物理鼠标切换到设备,JButton的动作反馈是典型的方式,但如果我用手指,反馈就会消失。 我已经尝试过重写方法来自定义我继承的JButtons和estended等,但是我还没有希望这个目标...我猜这与我们用鼠标触摸屏幕时有关,你只需点击屏幕上的一个点,但如果用手指触摸,则会选择几个像素。
有什么想法吗?
非常感谢你!
答案 0 :(得分:1)
我不完全确定您的意见是什么意思,但我想问你的问题是否定的问题的答案。 Swing从未被设计用于那种界面。但是,如果您所指的反馈类似按钮突出显示并在点击时膨胀,那么这通常是应该发生的事情。如果我怀疑你指的是在你触摸时执行的悬停动作但是没有“点击”按钮,那么你可能无法控制它。作为替代方案,如果您的应用程序尚未成熟,您可能需要考虑从swing切换到使用CSS的JavaFX,以便对此类内容进行大量控制。
答案 1 :(得分:0)
我有一个可以接受的解决方案。我将尝试尽可能简单和完整地解释它。
首先,你必须使用像这样的JButton扩展类:
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
/**
* Customized <code>JButton</code> to obtained a feedback user experience of movement.
* @author Gabriel Moreno.
*/
public class FeedbackTouchScreenButton extends JButton {
public FeedbackTouchScreenButton() {
super();
this.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(final MouseEvent e) {
new Thread(new Runnable() {
@Override
public void run() {
Color bg = e.getComponent().getBackground();
e.getComponent().setBackground(Color.BLUE); // For example
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
e.getComponent().setBackground(bg);
}
}).start();
} // mouseClicked()
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
});
} // FeedbackTouchScreenButton()
} // FeedbackTouchScreenButton
当您自定义相关按钮执行的操作时,您必须(小心地)抛出另一个线程。例如:
// ---
btnExample.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(final java.awt.event.ActionEvent evt) {
new Thread(new Runnable() {
@Override
public void run() {
btnExampleActionPerformed(evt);
} // run()
}).start();
}
});
// ---
这个例子显然有效。但实际上只是看起来......: - )
原因是因为在平板电脑屏幕上显示了&#39; onPressed&#39;组件的状态不像手指那样用鼠标指针工作。
关键:&#39; onClick&#39; =&#39; onPressed&#39; +&#39; onRelease&#39;。
&#39; onClick&#39;在触摸屏上正确完成。当你将手指从设备上松开时,就是这个技巧完成的那一刻。