Как реализовать приложение Java Swing для сенсорного экрана

мы построили систему точки продажи, и теперь мы требуем, чтобы реализовать его на сенсорных экранах? Нужно ли менять какой-либо код по очереди, чтобы это работало.

и мы используем клавиатуру для ввода значений-скажем, количества - есть ли способ java всплывать на клавиатуре (например, android), когда я фокусируюсь на JTextField?

5 ответов


вот простой пример того, как реализовать всплывающую клавиатуру:

enter image description here

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, но, вероятно, было бы лучше построить один в приложение, если вы можете.

Если вам нужно multi касание или имеете вопросы с специфическими регуляторами экрана касания, есть несколько вариантов.

ваш лучший выбор в swing, по крайней мере, на windows, кажется, этот проект:http://www.michaelmcguffin.com/code/JWinPointer/

JavaFX, похоже, имеет сенсорную поддержку, Intel имеет учебник: https://software.intel.com/en-us/articles/using-javafx-to-implement-multi-touch-with-java-on-windows-8-desktop - ... Возможно, вы сможете получить эту работу с swing, так как есть методы для размещения Swing в JavaFX и JavaFX в Swing вы можете искать другие ответы для взаимодействия между ними.

был проект MT4J, но он, похоже, не работает. Кажется, это не работает с Swing или JavaFX.


вы должны иметь возможность предоставить свою собственную виртуальную клавиатуру с помощью чего-то вроде JWindow и KeyboardFocusManager


мы внедрили пользовательский внешний вид для нашего приложения Swing с сенсорной поддержкой, чтобы все выглядело больше (все кнопки, флажки,... даже JTree экземпляры), так что их легко изменить с помощью пальца.

такое решение может сэкономить вам работу по преобразованию всех ваших пользовательских интерфейсов в удобный пользовательский интерфейс.


вы должны изменить свой пользовательский интерфейс и дизайн взаимодействия, таким образом, изменить код. Ознакомьтесь с рекомендациями Windows UX для touch -https://msdn.microsoft.com/en-us/library/windows/desktop/dn742468.aspx