如何将Java Swing应用程序实现到触摸屏

我们已经建立了销售点系统,现在我们需要将其实施到触摸屏? 我们是否需要依次更改任何代码才能使其正常工作。

我们正在使用键盘输入值 – 让我们说数量 – 当我专注于JTextField时,是否有一种java方式弹出键盘(如android)?

这是一个关于如何实现弹出键盘的简单示例:

在此处输入图像描述

import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.SwingUtilities; @SuppressWarnings("serial") public class MainFrame extends JFrame { private JTextField txt; private PopUpKeyboard keyboard; public MainFrame() { super("pop-up keyboard"); setDefaultCloseOperation(EXIT_ON_CLOSE); txt = new JTextField(20); keyboard = new PopUpKeyboard(txt); txt.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { Point p = txt.getLocationOnScreen(); py += 30; keyboard.setLocation(p); keyboard.setVisible(true); } }); setLayout(new FlowLayout()); add(txt); pack(); setLocationByPlatform(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new MainFrame().setVisible(true); } }); } private class PopUpKeyboard extends JDialog implements ActionListener { private JTextField txt; public PopUpKeyboard(JTextField txt) { this.txt = txt; setLayout(new GridLayout(3, 3)); for(int i = 1; i <= 9; i++) createButton(Integer.toString(i)); pack(); } private void createButton(String label) { JButton btn = new JButton(label); btn.addActionListener(this); btn.setFocusPainted(false); btn.setPreferredSize(new Dimension(100, 100)); Font font = btn.getFont(); float size = font.getSize() + 15.0f; btn.setFont(font.deriveFont(size)); add(btn); } @Override public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); txt.setText(txt.getText() + actionCommand); } } } 

如果您不需要多点触摸,那么与大多数触摸屏控制器一起使用的普通鼠标驱动程序将只有触摸屏模拟普通鼠标,其中触摸屏幕的手指被模拟为鼠标单击。

至于虚拟键盘,Windows和MacOSX中都内置了一些虚拟键盘,但如果可以,最好在应用程序中构建一个。

如果您需要多点触摸或有特定触摸屏控制器的问题,有几个选项。

在摇摆中,你最好的选择,至少在Windows上,似乎是这个项目: http : //www.michaelmcguffin.com/code/JWinPointer/

JavaFX似乎有触摸支持,英特尔有一个教程: https : //software.intel.com/en-us/articles/using-javafx-to-implement-multi-touch-with-java-on-windows-8-桌面 。 你可能能够以某种方式使用swing工作,因为有些方法可以在Swing中托管JavaFX和JavaFX中的Swing,你可能会寻找其他答案来完成两者之间的互操作。

有MT4J项目,但它似乎已经不存在了。 它似乎不适用于Swing或JavaFX。

您应该能够通过使用JWindowKeyboardFocusManager类的东西来提供自己的虚拟KeyboardFocusManager

我们为Swing应用程序实现了一个自定义的Look-and-feel,带有触摸支持,使一切看起来更大(所有按钮,复选框,……,甚至是JTree实例),以便用手指轻松修改它们。

这样的解决方案可以为您节省将所有UI转换为触摸友好UI的工作。

您应该更改用户体验和交互设计,从而更改代码。 查看Windows UX触摸指南 – https://msdn.microsoft.com/en-us/library/windows/desktop/dn742468.aspx