Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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 (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 (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....