2012-07-24 115 views
6

¿Hemos construido un sistema de punto de venta y ahora necesitamos implementarlo en las pantallas táctiles? ¿Necesitamos cambiar algún código para que esto funcione?Cómo implementar una aplicación Java Swing en la pantalla táctil

Y estamos usando el teclado para ingresar valores - digamos cantidad - ¿Hay alguna forma de abrir un tablero de teclas (como Android) cuando me concentro en un JTextField?

+0

El teclado muestra el teclado que se ejecuta en el foco. Si no es así, tendría que crear su propio teclado virtual o usar JNA/JNI para hacer esto. – LanguagesNamedAfterCofee

+0

JNA/JNI como en? – Chan

Respuesta

3

Aquí es un ejemplo sencillo de cómo implementar un teclado emergente:

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

Si no necesita multitáctiles, los controladores de mouse normales para usar con la mayoría de los controladores de pantalla táctil simplemente harán que la pantalla táctil emule un mouse normal donde se emula un dedo tocando la pantalla con un clic del mouse.

En cuanto a un teclado virtual, hay crummy incorporado en Windows y MacOSX, pero probablemente sería mejor construir uno en la aplicación si es posible.

Si necesita un toque múltiple o tiene problemas con los controles de pantalla táctil específicos, hay algunas opciones.

Su mejor apuesta en el columpio, al menos en las ventanas, parece que este proyecto: http://www.michaelmcguffin.com/code/JWinPointer/

JavaFX parece tener soporte táctil, Intel tiene un tutorial: https://software.intel.com/en-us/articles/using-javafx-to-implement-multi-touch-with-java-on-windows-8-desktop. Es posible que pueda hacer que esto funcione con swing de alguna manera, ya que hay métodos para alojar Swing en JavaFX y JavaFX en Swing, puede buscar otras respuestas para lograr la interoperabilidad entre ambos.

Hubo un proyecto MT4J, pero parece haber desaparecido. No parece funcionar con Swing o JavaFX.

+0

¿No hay bibliotecas preconstruidas? – Chan

+0

Estoy seguro de que existen teclados virtuales comerciales Java. – Charlie

+0

Do google search, encontré 2-3 en la parte superior del listado de búsqueda. Si no conoce sus requisitos, es difícil hacer una sugerencia al respecto. – MadProgrammer

0

hemos implementado una costumbre Look-and-feel de nuestra aplicación swing con soporte táctil para realizar todo lo que acaba parezca más grande (todos los botones, casillas de verificación, ..., incluso JTree instancias) para que sea fácil modificarlos con un dedo.

Tal solución puede ahorrarle el trabajo de convertir todas sus interfaces de usuario en una interfaz de usuario amigable para el tacto.

Cuestiones relacionadas