[APORTE] Autocompler en un JComboBox

Iniciado por AFelipeTrujillo, 13 Abril 2010, 19:23 PM

0 Miembros y 1 Visitante están viendo este tema.

AFelipeTrujillo

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 (java) [Seleccionar]
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.sql.Date;

import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/*
* Autocompletar !!!!
* */

public class JAng3r extends JComboBox implements JComboBox.KeySelectionManager{

    public static void main(String[] args) {
        JFrame f = new JFrame();
        // Creamos el Marco o Frame
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // con este metodo podemos cerrar la ejecucion
        // del programa
        f.setSize(300,300);
        // le damos el tamaño
        Container c = f.getContentPane();
        //Creamos el contenedor para alojar nuestras
        // funciones GUI
        c.setLayout(null);
        String [] cuerpo ={"Andres","Ang3r","Foro","Texto"};
        //pues por ahora le mando un arreglo pero cuando sea
        // un aplicacion seria este arreglo se llena desde la
        // base de datos
        JComboBox j = new JAng3r(cuerpo);
        // Hacemos Up-Casting
        j.setBounds(50,50,100,20);
        j.setEditable(true);
        // Damos permisos para que se pueda editar
        f.add(j);
        // hacemos el upcasting
        f.setVisible(true);
    }   

    // ESTO ES RARO PERO SE PUEDE :)
    // creamos un clase llamada formato la cual nos permite
    // darle formato solamente en el tamaño de caracteres
    //admitidos, asi como si acepta caracteres alfanuméricos
    // o solo numéricos al elemento
    public class Formato  extends PlainDocument{

        public void insertString(int offset, String str, AttributeSet a) throws BadLocationException{
            // Podemos Observar que esta Retornando <----------
            System.out.println(offset+" "+str);
            if (str == null){
                return;
            }
            super.insertString(offset,str, a);
            if (str.length()!=0){
                // Este metodo activa el evento grafico sin el
                // el efecto no seria posible
                fireActionEvent();
            }
        }
    }

    public JAng3r(Object[] cuerpo) {
        super(cuerpo);

        // Recordemos que JAng3r extiende o hereda de JComboBox
        // Por estas razones le envio este objeto al evento
        // setKeySelectionManager(JComboBox);
        setKeySelectionManager(this);
        JTextField jtext;
        // con el metodo getEditor() retornamos el editor
        // con el que se creo el JComboBox
        jtext = (JTextField)getEditor().getEditorComponent();
        // Le pasamos el formato al JtextField
        jtext.setDocument(new Formato());
        addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent evt)
            {
                JTextField textf = (JTextField)getEditor().getEditorComponent();
                String text = textf.getText();
                ComboBoxModel aModel = getModel();
                String aux;
                for(int i = 0; i < aModel.getSize(); i++)
                {
                    aux = aModel.getElementAt(i).toString();
                    if(aux.toLowerCase().startsWith(text.toLowerCase()))
                    {
                        System.out.println(text+" tiene una Ocurrencia con: "+aux);
                        textf.setText(aux);
                        textf.setSelectionStart(text.length());
                        textf.setSelectionEnd(aux.length());
                        break;
                    }
                }
            }
        });
    }
    public int selectionForKey(char aKey, ComboBoxModel modelo) {
        return 0;

    }

}


FUENTE


sapito169

buen aporte es recomedable que le quites el metod main que no tiene nada que ver

AFelipeTrujillo

gracias pero no entiendo su apreciación ???

sapito169

que el metodo main(public static void main ...) deve estar en otra clase separada

AFelipeTrujillo

ahhh ya pero eso es puro protocolo....