如何实现一个Java Swing应用程序触摸屏(How to implement a Java Sw

2019-06-26 11:37发布

我们已经建立了销售系统的一个点,现在我们需要实现它以触摸屏? 我们是否需要更改任何代码依次为使这一工作。

而我们所使用的键盘输入值 - 假设量 - 有没有弹出一个键盘(如Android),当我专注于一个JTextField的一个java方法吗?

Answer 1:

下面是关于如何实现一个弹出键盘一个简单的例子:

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);
        }
    }
}


Answer 2:

如果你不需要多点触摸,与大多数触摸屏控制器使用正常的鼠标驱动程序将只具有触摸屏模拟正常小鼠有手指触摸屏幕仿真为鼠标点击。

当虚拟键盘,也有内置在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和JavaFX Swing方法您可能能够以某种方式得到这个工作摆动,你可能会寻找其他的答案在两者之间互操作完成。

有项目MT4J,但它似乎已不存在。 它似乎并不与Swing或JavaFX的工作。



Answer 3:

您应该能够通过使用像一个提供自己的虚拟键盘JWindowKeyboardFocusManager



Answer 4:

我们实现了一个自定义的外观和感觉我们与触控支持Swing应用程序,使一切只是看起来更大(所有的按钮,复选框,......,甚至JTree情况下),这样很容易用手指进行修改。

这样的解决方案可能会节省您将所有的UI的转换成触摸友好的用户界面的工作。



Answer 5:

你应该改变你的用户体验和交互设计,从而改变代码。 检查出的Windows UX准则触摸- https://msdn.microsoft.com/en-us/library/windows/desktop/dn742468.aspx



文章来源: How to implement a Java Swing application to Touch Screen