2012-07-24 7 views
6

Wir haben ein Point-of-Sale-System entwickelt und jetzt müssen wir es auf Touchscreens implementieren? Müssen wir einen Code ändern, damit dies funktioniert?So implementieren Sie eine Java Swing-Anwendung für den Touchscreen

Und wir verwenden die Tastatur, um Werte einzugeben - sagen wir Quantität - Gibt es eine Java-Art, eine Tastatur aufzutauchen (wie Android), wenn ich mich auf ein JTextField konzentriere?

+0

Die Tastatur, die im Fokus erscheint, wird vom Betriebssystem implementiert. Wenn dies nicht der Fall ist, müssten Sie Ihre eigene virtuelle Tastatur erstellen oder JNA/JNI dazu verwenden. – LanguagesNamedAfterCofee

+0

JNA/JNI wie in? – Chan

Antwort

3

Hier ist ein einfaches Beispiel dafür, wie eine Pop-up-Tastatur zu implementieren:

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

Wenn Sie keine Multitouch-Funktion benötigen, wird der normale Maustreiber für die meisten Touchscreen-Controller nur den Touchscreen einer normalen Maus emulieren, in der ein Finger den Bildschirm als Mausklick emuliert.

Wie für eine virtuelle Tastatur, gibt es in Windows und MacOSX krümelige Einsen, aber es wäre wahrscheinlich am besten, einen in die Anwendung zu bauen, wenn Sie können.

Wenn Sie Multitouch benötigen oder Probleme mit bestimmten Touchscreen-Controllern haben, gibt es ein paar Optionen.

Ihre beste Wette in Schwung, zumindest auf Fenster, dieses Projekt zu sein scheint: http://www.michaelmcguffin.com/code/JWinPointer/

JavaFX Touch-Unterstützung zu haben scheint, hat Intel ein Tutorial: https://software.intel.com/en-us/articles/using-javafx-to-implement-multi-touch-with-java-on-windows-8-desktop. Sie könnten in der Lage sein, diese Arbeit mit Schwung irgendwie zu bekommen, da es Methoden sind Swing-in JavaFX und JavaFX in Swing zu hosten, können Sie für andere Antworten suchen Interop zwischen den beiden zu erreichen.

Es gab Projekt MT4J, aber es scheint nicht mehr zu funktionieren. Es scheint nicht mit Swing oder JavaFX zu arbeiten.

+0

Gibt es keine vorgefertigten Bibliotheken? – Chan

+0

Ich bin sicher, dass es kommerzielle Java virtuelle Tastaturen gibt. – Charlie

+0

Suche ich Google, fand ich 2-3 oben im Sucheintrag. Wenn Sie Ihre Anforderungen nicht kennen, ist es schwierig, diesbezüglich einen Vorschlag zu machen. – MadProgrammer

0

Wir haben ein benutzerdefiniertes Look-and-Feel für unsere Swing-Anwendung mit Touch-Unterstützung implementiert, um alles größer aussehen zu lassen (alle Buttons, Checkboxen, ..., sogar JTree Instanzen), so dass es einfach ist, sie mit einem Finger zu ändern.

Eine solche Lösung könnte Ihnen die Arbeit ersparen, alle Ihre Benutzeroberflächen in eine berührungsfreundliche Benutzeroberfläche zu konvertieren.

Verwandte Themen