2012-07-24 8 views
6

Abbiamo creato un sistema Point of Sale e ora abbiamo bisogno di implementarlo su Touch screen? Abbiamo bisogno di cambiare qualsiasi codice a turno per consentire a questo di funzionare.Come implementare un'applicazione Java Swing su Touch Screen

E stiamo usando la tastiera per inserire valori - diciamo quantità - C'è un modo java di far apparire una tastiera (come Android) quando mi concentro su un JTextField?

+0

La tastiera che appare a fuoco è implementata dall'OS. In caso contrario, dovresti creare la tua tastiera virtuale o usare JNA/JNI per farlo. – LanguagesNamedAfterCofee

+0

JNA/JNI come in? – Chan

risposta

3

Ecco un semplice esempio su come realizzare una tastiera pop-up:

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

Se non è necessario il multi-tocco, i normali driver del mouse da utilizzare con la maggior parte dei controller del touch screen avranno semplicemente il touch-screen emulare un normale mouse in cui un dito che tocca lo schermo viene emulato come un clic del mouse.

Come per una tastiera virtuale, ci sono quelli scadenti incorporati in Windows e MacOSX ma sarebbe probabilmente meglio crearne uno nell'applicazione, se possibile.

Se è necessario il multitouch o si verificano problemi con i controller del touch screen specifici, sono disponibili alcune opzioni.

La cosa migliore in altalena, almeno su finestre, sembra essere questo progetto: http://www.michaelmcguffin.com/code/JWinPointer/

JavaFX sembra avere supporto touch, Intel ha un tutorial: https://software.intel.com/en-us/articles/using-javafx-to-implement-multi-touch-with-java-on-windows-8-desktop. Potresti essere in grado di farlo funzionare con swing in qualche modo poiché ci sono metodi per ospitare Swing in JavaFX e JavaFX in Swing, potresti cercare altre risposte per ottenere un intervallo tra entrambe.

C'era il progetto MT4J, ma sembra essere defunto. Non sembra funzionare con Swing o JavaFX.

+0

Non ci sono librerie predefinite? – Chan

+0

Sono sicuro che esistano tastiere virtuali Java commerciali. – Charlie

+0

Nella ricerca google, ho trovato 2-3 nella parte superiore dell'elenco di ricerca. Non conoscendo le tue esigenze è difficile fare un suggerimento al riguardo. – MadProgrammer

0

abbiamo implementato un look-and-feel personalizzato per la nostra applicazione oscillazione con supporto touch per rendere tutto solo sembrare più grande (tutti i pulsanti, caselle di controllo, ..., anche JTree istanze) in modo che sia facile modificarle utilizzando un dito.

Una soluzione del genere potrebbe farti risparmiare il lavoro necessario per convertire tutte le tue interfacce utente in un'interfaccia utente touch-friendly.