Foro de elhacker.net

Programación => Java => Mensaje iniciado por: AFelipeTrujillo en 13 Abril 2010, 19:23 pm



Título: [APORTE] Autocompler en un JComboBox
Publicado por: AFelipeTrujillo en 13 Abril 2010, 19:23 pm
Bueno hace rato una mañana me levante pensando como las paginas web pueden auto-completar texto sin necesidad de tener un registro en nuestro historial de navegación, como lo hace google bueno me empape de la clase JComboBox asi que este fue el resultado:

Las palabras las tomo de arreglo de String, pero como lo cito en el code, para que sea un aplicación seria el arreglo debería ser dinámico lo mejor es consultar una base de datos y tomar los datos de allí, asi mismo si el termino no esta definido en la lista debe estar en la capacidad de adicionar mas palabritas, si alguien se le apunta de una lo apoyo

Bueno les dejo code t salud2

Código
  1. import java.awt.Container;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.KeyEvent;
  5. import java.sql.Date;
  6.  
  7. import javax.swing.*;
  8. import javax.swing.text.AttributeSet;
  9. import javax.swing.text.BadLocationException;
  10. import javax.swing.text.PlainDocument;
  11.  
  12. /*
  13.  * Autocompletar !!!!
  14.  * */
  15.  
  16. public class JAng3r extends JComboBox implements JComboBox.KeySelectionManager{
  17.  
  18.    public static void main(String[] args) {
  19.        JFrame f = new JFrame();
  20.        // Creamos el Marco o Frame
  21.        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22.        // con este metodo podemos cerrar la ejecucion
  23.        // del programa
  24.        f.setSize(300,300);
  25.        // le damos el tamaño
  26.        Container c = f.getContentPane();
  27.        //Creamos el contenedor para alojar nuestras
  28.        // funciones GUI
  29.        c.setLayout(null);
  30.        String [] cuerpo ={"Andres","Ang3r","Foro","Texto"};
  31.        //pues por ahora le mando un arreglo pero cuando sea
  32.        // un aplicacion seria este arreglo se llena desde la
  33.        // base de datos
  34.        JComboBox j = new JAng3r(cuerpo);
  35.        // Hacemos Up-Casting
  36.        j.setBounds(50,50,100,20);
  37.        j.setEditable(true);
  38.        // Damos permisos para que se pueda editar
  39.        f.add(j);
  40.        // hacemos el upcasting
  41.        f.setVisible(true);
  42.    }    
  43.  
  44.    // ESTO ES RARO PERO SE PUEDE :)
  45.    // creamos un clase llamada formato la cual nos permite
  46.    // darle formato solamente en el tamaño de caracteres
  47.    //admitidos, asi como si acepta caracteres alfanuméricos
  48.    // o solo numéricos al elemento
  49.    public class Formato  extends PlainDocument{
  50.  
  51.        public void insertString(int offset, String str, AttributeSet a) throws BadLocationException{
  52.            // Podemos Observar que esta Retornando <----------
  53.            System.out.println(offset+" "+str);
  54.            if (str == null){
  55.                return;
  56.            }
  57.            super.insertString(offset,str, a);
  58.            if (str.length()!=0){
  59.                // Este metodo activa el evento grafico sin el
  60.                // el efecto no seria posible
  61.                fireActionEvent();
  62.            }
  63.        }
  64.    }
  65.  
  66.    public JAng3r(Object[] cuerpo) {
  67.        super(cuerpo);
  68.  
  69.        // Recordemos que JAng3r extiende o hereda de JComboBox
  70.        // Por estas razones le envio este objeto al evento
  71.        // setKeySelectionManager(JComboBox);
  72.        setKeySelectionManager(this);
  73.        JTextField jtext;
  74.        // con el metodo getEditor() retornamos el editor
  75.        // con el que se creo el JComboBox
  76.        jtext = (JTextField)getEditor().getEditorComponent();
  77.        // Le pasamos el formato al JtextField
  78.        jtext.setDocument(new Formato());
  79.        addActionListener(new ActionListener()
  80.        {
  81.            public void actionPerformed(ActionEvent evt)
  82.            {
  83.                JTextField textf = (JTextField)getEditor().getEditorComponent();
  84.                String text = textf.getText();
  85.                ComboBoxModel aModel = getModel();
  86.                String aux;
  87.                for(int i = 0; i < aModel.getSize(); i++)
  88.                {
  89.                    aux = aModel.getElementAt(i).toString();
  90.                    if(aux.toLowerCase().startsWith(text.toLowerCase()))
  91.                    {
  92.                        System.out.println(text+" tiene una Ocurrencia con: "+aux);
  93.                        textf.setText(aux);
  94.                        textf.setSelectionStart(text.length());
  95.                        textf.setSelectionEnd(aux.length());
  96.                        break;
  97.                    }
  98.                }
  99.            }
  100.        });
  101.    }
  102.    public int selectionForKey(char aKey, ComboBoxModel modelo) {
  103.        return 0;
  104.  
  105.    }
  106.  
  107. }

FUENTE (http://angercode.wordpress.com/2009/09/27/autocompler-en-un-jcombobox-en-java/)



Título: Re: [APORTE] Autocompler en un JComboBox
Publicado por: sapito169 en 14 Abril 2010, 04:14 am
buen aporte es recomedable que le quites el metod main que no tiene nada que ver


Título: Re: [APORTE] Autocompler en un JComboBox
Publicado por: AFelipeTrujillo en 14 Abril 2010, 14:51 pm
gracias pero no entiendo su apreciación ???


Título: Re: [APORTE] Autocompler en un JComboBox
Publicado por: sapito169 en 15 Abril 2010, 04:34 am
que el metodo main(public static void main ...) deve estar en otra clase separada


Título: Re: [APORTE] Autocompler en un JComboBox
Publicado por: AFelipeTrujillo en 15 Abril 2010, 14:22 pm
ahhh ya pero eso es puro protocolo....