簡體   English   中英

如何將Java Swing應用程序實現到觸摸屏

[英]How to implement a Java Swing application to Touch Screen

我們已經建立了銷售點系統,現在我們需要將其實施到觸摸屏? 我們是否需要依次更改任何代碼才能使其正常工作。

我們正在使用鍵盤輸入值 - 比方說數量 - 當我專注於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工作,因為有些方法可以在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM