我们已经建立了一个销售点系统,现在我们需要将它实施到触摸屏上吗?我们是否需要依次更改任何代码才能使其正常工作。
我们正在使用键盘输入值 - 比如说数量 - 当我专注于 JTextField 时,是否有一种 java 方式可以弹出键盘(如 android)?
我们已经建立了一个销售点系统,现在我们需要将它实施到触摸屏上吗?我们是否需要依次更改任何代码才能使其正常工作。
我们正在使用键盘输入值 - 比如说数量 - 当我专注于 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();
p.y += 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,因为有一些方法可以在 JavaFX 中托管 Swing 和在 Swing 中托管 JavaFX,您可能会寻找其他答案来完成两者之间的互操作。
有项目 MT4J,但它似乎已经不复存在。它似乎不适用于 Swing 或 JavaFX。
您应该能够通过使用类似 aJWindow
和KeyboardFocusManager
我们为带有触摸支持的 Swing 应用程序实现了自定义外观,以使一切看起来更大(所有按钮、复选框……甚至JTree
实例),以便使用手指轻松修改它们。
这样的解决方案可能会节省您将所有 UI 转换为触摸友好 UI 的工作。
你应该改变你的用户体验和交互设计,从而改变代码。查看 Windows UX 触控指南 - https://msdn.microsoft.com/en-us/library/windows/desktop/dn742468.aspx