Java 平板触摸屏上的摆动反馈按钮
Java Swing feedback button on a tablet touch screen
是否可以在 Java 平板电脑上的 Swing 应用程序中从 JButton 获得反馈?
我正在使用 Windows 8,如果我将物理鼠标切换到设备,来自 JButton 的运动反馈是典型的方式,但如果我使用手指,反馈就会消失。
我已经尝试过重写自定义我继承的 JButtons 的方法,以及一个扩展等,但我没有希望达到目标......我想这与我们用鼠标触摸屏幕时有关,你只需点击屏幕上的一个点, 但如果用手指触摸, 则有几个像素被选中。
有什么想法吗?
非常感谢!
我不完全确定您所说的反馈是什么意思,但我认为您提出的问题的答案是否定的。 Swing 从来就不是为那种界面设计的。但是,如果您所指的反馈类似于按钮在单击时突出显示和膨胀,则这通常应该自行发生。如果我怀疑你指的是当你触摸但不 'tap' 按钮时执行的悬停动作,那么你可能无法控制它。作为替代方案,如果您的应用程序还不成熟,您可能需要考虑从 swing 切换到使用 CSS 的 JavaFX 来让您对此类事情进行大量控制。
我有一个可以接受的解决方案。我会尽量简单完整的解释一下。
首先,您必须像这样使用扩展的 JButton class:
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();
}
});
// ---
这个例子显然有效。但实际上只是看起来... :-)
原因是因为在平板电脑屏幕上,组件的 'onPressed' 状态无法像使用鼠标指针那样使用手指。
关键:'onClick' = 'onPressed' + 'onRelease'.
而'onClick'是在触摸屏上正确完成的。这是技巧完成的时刻,当您从设备上松开手指时。
是否可以在 Java 平板电脑上的 Swing 应用程序中从 JButton 获得反馈?
我正在使用 Windows 8,如果我将物理鼠标切换到设备,来自 JButton 的运动反馈是典型的方式,但如果我使用手指,反馈就会消失。 我已经尝试过重写自定义我继承的 JButtons 的方法,以及一个扩展等,但我没有希望达到目标......我想这与我们用鼠标触摸屏幕时有关,你只需点击屏幕上的一个点, 但如果用手指触摸, 则有几个像素被选中。
有什么想法吗?
非常感谢!
我不完全确定您所说的反馈是什么意思,但我认为您提出的问题的答案是否定的。 Swing 从来就不是为那种界面设计的。但是,如果您所指的反馈类似于按钮在单击时突出显示和膨胀,则这通常应该自行发生。如果我怀疑你指的是当你触摸但不 'tap' 按钮时执行的悬停动作,那么你可能无法控制它。作为替代方案,如果您的应用程序还不成熟,您可能需要考虑从 swing 切换到使用 CSS 的 JavaFX 来让您对此类事情进行大量控制。
我有一个可以接受的解决方案。我会尽量简单完整的解释一下。
首先,您必须像这样使用扩展的 JButton class:
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();
}
});
// ---
这个例子显然有效。但实际上只是看起来... :-)
原因是因为在平板电脑屏幕上,组件的 'onPressed' 状态无法像使用鼠标指针那样使用手指。
关键:'onClick' = 'onPressed' + 'onRelease'.
而'onClick'是在触摸屏上正确完成的。这是技巧完成的时刻,当您从设备上松开手指时。