6

POSシステムを構築しましたが、タッチスクリーンに実装する必要がありますか?これを機能させるには、コードを順番に変更する必要がありますか?

そして、キーボードを使用して値を入力しています-たとえば数量-JTextFieldに焦点を合わせたときにキーボード(androidなど)をポップアップするJavaの方法はありますか?

4

5 に答える 5

4

ポップアップ キーボードを実装する方法の簡単な例を次に示します。

ここに画像の説明を入力

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);
        }
    }
}
于 2012-07-24T03:59:44.487 に答える
3

マルチタッチが必要ない場合、ほとんどのタッチ スクリーン コントローラで使用する通常のマウス ドライバでは、タッチ スクリーンが通常のマウスをエミュレートし、指が画面に触れるとマウス クリックとしてエミュレートされます。

仮想キーボードに関しては、Windows と MacOSX に組み込まれている厄介なものがありますが、可能であればアプリケーションに組み込むのがおそらく最善です。

マルチタッチが必要な場合、または特定のタッチ スクリーン コントローラーに問題がある場合は、いくつかのオプションがあります。

少なくとも 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-デスクトップ。JavaFX で Swing をホストし、Swing で JavaFX をホストする方法があるため、何らかの方法でこれをスイングで動作させることができる場合があります。両方の間の相互運用を達成するための他の答えを探すことができます。

プロジェクト MT4J がありましたが、廃止されたようです。Swing や JavaFX では動作しないようです。

于 2012-07-24T03:45:04.507 に答える
1

JWindowaや のようなものを使用して、独自の仮想キーボードを提供できるはずです。KeyboardFocusManager

于 2012-07-24T03:47:39.407 に答える
0

ユーザーエクスペリエンスとインタラクションデザインを変更して、コードを変更する必要があります。タッチに関するWindowsUXガイドラインを確認してください-https://msdn.microsoft.com/en-us/library/windows/desktop/dn742468.aspx

于 2012-07-25T12:57:20.343 に答える
0

JTree指で簡単に変更できるように、すべて (すべてのボタン、チェックボックス、...、さらにはインスタンス) が大きく見えるように、タッチ サポートを備えた Swing アプリケーションのカスタム ルック アンド フィールを実装しました。

このようなソリューションを使用すると、すべての UI をタッチ フレンドリーな UI に変換する手間を省くことができます。

于 2012-07-24T05:44:40.820 に答える