2012-07-24 28 views
6

Zbudowaliśmy system Point of Sale, a teraz musimy go wdrożyć na ekranach dotykowych? Czy musimy zmienić kod po kolei, aby to zadziałało.Jak zaimplementować aplikację Java Swing na ekranie dotykowym

Używamy klawiatury do wprowadzania wartości - powiedzmy ilość - Czy jest jakiś sposób na pojawienie się klawiatury (jak android) podczas ustawiania ostrości na JTextField?

+0

Klawiatura pojawiająca się na fokusie jest zaimplementowana przez os. Jeśli nie, musisz utworzyć własną wirtualną klawiaturę lub użyć JNA/JNI, aby to zrobić. – LanguagesNamedAfterCofee

+0

JNA/JNI jak w? – Chan

Odpowiedz

3

Oto prosty przykład jak zaimplementować wyskakujące klawiatury:

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

Jeśli nie potrzebujesz wielodotyku, normalne sterowniki myszy do użytku z większością kontrolerów ekranu dotykowego będą po prostu miały ekran dotykowy na normalnej myszy, gdzie palec dotyka ekranu jest emulowany jako kliknięcie myszą.

Jeśli chodzi o klawiaturę wirtualną, są tam zgniłe wbudowane w Windows i MacOSX, ale najlepiej byłoby, gdybyś mógł ją zainstalować w aplikacji.

Jeśli potrzebujesz multi-touch lub masz problemy z konkretnymi kontrolerami ekranu dotykowego, istnieje kilka opcji.

Najprościej w rozkwicie, przynajmniej na oknach, wydaje się, że ten projekt: http://www.michaelmcguffin.com/code/JWinPointer/

JavaFX wydaje się mieć dotykowy wsparcie, Intel ma tutorial: https://software.intel.com/en-us/articles/using-javafx-to-implement-multi-touch-with-java-on-windows-8-desktop. Być może uda ci się to jakoś poradzić sobie z huśtaniem, ponieważ istnieją metody do obsługi Swing w JavaFX i JavaFX w Swing, możesz szukać innych odpowiedzi, aby osiągnąć współzależność między nimi.

Był projekt MT4J, ale wydaje się być nieistniejący. Wygląda na to, że nie działa z Swingiem ani JavaFX.

+0

Czy nie ma gotowych bibliotek? – Chan

+0

Jestem pewien, że istnieją komercyjne wirtualne klawiatury Java. – Charlie

+0

Czy szukam google, znalazłem 2-3 w górnej części listy wyszukiwania. Brak znajomości twoich wymagań utrudnia wysuwanie sugestii w tym zakresie. – MadProgrammer

0

Zaimplementowaliśmy niestandardowy wygląd aplikacji My Swing z obsługą dotykową, aby wszystko wyglądało na większe (wszystkie przyciski, pola wyboru, ... nawet JTree wystąpień), aby można je było łatwo modyfikować palcem.

Takie rozwiązanie może zaoszczędzić pracę, aby przekonwertować wszystkie interfejsy użytkownika na przyjazny dla użytkownika interfejs użytkownika.