Auto combo box

2 respostas
P

pessoal desculpe a insistencia:relembrando preciso saber como defino minha JComboBox feita no swing, para essa nova clase Java2sAutoComboBox, segue abixo as classes usadas:

import java.util.*;
import javax.swing.JTextField;
import javax.swing.text.*;

public class Java2sAutoTextField extends JTextField  {
    class AutoDocument extends PlainDocument {
        
        public void replace(int i, int j, String s, AttributeSet attributeset)
        throws BadLocationException {
            super.remove(i, j);
            insertString(i, s, attributeset);
        }
        
        public void insertString(int i, String s, AttributeSet attributeset)
        throws BadLocationException {
            if (s == null || "".equals(s))
                return;
            String s1 = getText(0, i);
            String s2 = getMatch(s1 + s);
            int j = (i + s.length()) - 1;
            if (isStrict && s2 == null) {
                s2 = getMatch(s1);
                j--;
            } else if (!isStrict && s2 == null) {
                super.insertString(i, s, attributeset);
                return;
            }
            if (autoComboBox != null && s2 != null)
                autoComboBox.setSelectedValue(s2);
            super.remove(0, getLength());
            super.insertString(0, s2, attributeset);
            setSelectionStart(j + 1);
            setSelectionEnd(getLength());
        }
        
        public void remove(int i, int j) throws BadLocationException {
            int k = getSelectionStart();
            if (k > 0)
                k--;
            String s = getMatch(getText(0, k));
            if (!isStrict && s == null) {
                super.remove(i, j);
            } else {
                super.remove(0, getLength());
                super.insertString(0, s, null);
            }
            if (autoComboBox != null && s != null)
                autoComboBox.setSelectedValue(s);
            try {
                setSelectionStart(k);
                setSelectionEnd(getLength());
            } catch (Exception exception) {
            }
        }
        
    }
    
   public Java2sAutoTextField(Vector vector) {
        isCaseSensitive = false;
        isStrict = true;
        autoComboBox = null;
        if (vector == null) {
            throw new IllegalArgumentException("values can not be null");
        } else {
            dataVector = vector;
            init();
            return;
        }
    }
    
  public Java2sAutoTextField(Vector vector, Java2sAutoComboBox b) {
        isCaseSensitive = false;
        isStrict = true;
        autoComboBox = null;
        if (vector == null) {
            throw new IllegalArgumentException("values can not be null");
        } else {
            dataVector = vector;
            autoComboBox = b;
            init();
            return;
        }
    }
    
    private void init() {
        setDocument(new AutoDocument());
        if (isStrict && dataVector.size() > 0)
            setText(dataVector.get(0).toString());
    }
    
    private String getMatch(String s) {
        for (int i = 0; i < dataVector.size(); i++) {
            String s1 = dataVector.get(i).toString();
            if (s1 != null) {
                if (!isCaseSensitive
                        && s1.toLowerCase().startsWith(s.toLowerCase()))
                    return s1;
                if (isCaseSensitive && s1.startsWith(s))
                    return s1;
            }
        }
        
        return null;
    }
    
    public void Selection(String s) {
        AutoDocument _lb = (AutoDocument) getDocument();
        if (_lb != null)
            try {
                int i = Math.min(getCaret().getDot(), getCaret().getMark());
                int j = Math.max(getCaret().getDot(), getCaret().getMark());
                _lb.replace(i, j - i, s, null);
            } catch (Exception exception) {
            }
    }
    
    public boolean isCaseSensitive() {
        return isCaseSensitive;
    }
    
    public void setCaseSensitive(boolean flag) {
        isCaseSensitive = flag;
    }
    
    public boolean isStrict() {
        return isStrict;
    }
    
    public void setStrict(boolean flag) {
        isStrict = flag;
    }
    
    public Vector getDataVector() {
        return dataVector;
    }
    
    public void setDataVector(Vector vector) {
        if (vector == null) {
            throw new IllegalArgumentException("values can not be null");
        } else {
            dataVector = vector;
            return;
        }
    }
    
    private Vector dataVector;
    
    private boolean isCaseSensitive;
    
    private boolean isStrict;
    
    private Java2sAutoComboBox autoComboBox;
}
import java.awt.event.ItemEvent;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.plaf.basic.BasicComboBoxEditor;

public class Java2sAutoComboBox extends JComboBox {
    private class AutoTextFieldEditor extends BasicComboBoxEditor {
        
        private Java2sAutoTextField getAutoTextFieldEditor() {
            return (Java2sAutoTextField) editor;
        }
        
        AutoTextFieldEditor(java.util.Vector vector) {
            editor = new Java2sAutoTextField(vector, Java2sAutoComboBox.this);
        }
    }
    
    public Java2sAutoComboBox(java.util.Vector vector) {
        isFired = false;
        autoTextFieldEditor = new AutoTextFieldEditor(vector);
        setEditable(true);
        setModel(new DefaultComboBoxModel(vector.toArray()) {
            
            protected void fireContentsChanged(Object obj, int i, int j) {
                if (!isFired)
                    super.fireContentsChanged(obj, i, j);
            }
            
        });
        setEditor(autoTextFieldEditor);
    }
    
    public boolean isCaseSensitive() {
        return autoTextFieldEditor.getAutoTextFieldEditor().isCaseSensitive();
    }
    
    public void setCaseSensitive(boolean flag) {
        autoTextFieldEditor.getAutoTextFieldEditor().setCaseSensitive(flag);
    }
    
    public boolean isStrict() {
        return autoTextFieldEditor.getAutoTextFieldEditor().isStrict();
    }
    
    public void setStrict(boolean flag) {
        autoTextFieldEditor.getAutoTextFieldEditor().setStrict(flag);
    }
    
    public java.util.Vector getDataVector() {
        return autoTextFieldEditor.getAutoTextFieldEditor().getDataVector();
    }
    
    public void setDataVector(java.util.Vector vector) {
        autoTextFieldEditor.getAutoTextFieldEditor().setDataVector(vector);
        setModel(new DefaultComboBoxModel(vector.toArray()));
    }
    
    void setSelectedValue(Object obj) {
        if (isFired) {
            return;
        } else {
            isFired = true;
            setSelectedItem(obj);
            fireItemStateChanged(new ItemEvent(this, 701, selectedItemReminder, 1));
            isFired = false;
            return;
        }
    }
    
    protected void fireActionEvent() {
        if (!isFired)
            super.fireActionEvent();
    }
    
    private AutoTextFieldEditor autoTextFieldEditor;
    
    private boolean isFired;
    
}

Esta eh a classe que uso para testar:

import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;

public class Teste extends JFrame {
    private Vector v;
    private String opcoes[] = {"gato", "cachorro", "mamute", "viado", "cavalo"};
    /** Creates a new instance of Teste */
    public Teste() {
        v = new Vector();
        for (int i =0; i < opcoes.length; i++){
            v.add(opcoes[i]);
        }
        Java2sAutoComboBox jac = new Java2sAutoComboBox(v);
        Java2sAutoTextField jtf = new  Java2sAutoTextField(v, jac);
        
        Container c = getContentPane();
        c.add(jac);
    }
    
    public static void main(String args[]){
       final Teste app = new Teste();
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Teste().setVisible(true);
            }
            
        });
    }

Veja que defino uma Java2sAutoComboBox, como faço isso redefinindo no swing, ou se existe uma outra maneira???

2 Respostas

dudaskank

Sua classe tem algum problema? Não cheguei a rodar ou testar nada, mas não entendi o que você está querendo. O que quer dizer com “redefinir no swing”?

P

para que ela funcione eu preciso definir um tipo Java2sAutoComboBox e passalo cmo parametro pra a outra o construtor da outra classe(ver teste), no entanto fiz minha interface gráfica no swing e lah tenho uma JComboBox, ou seja teria que no caso fazer com esse cara fosse Java2sAutoComboBox, pelo menos essa foi a única maneira vista por mim. Tem alguma outra idéia???

Criado 26 de janeiro de 2007
Ultima resposta 26 de jan. de 2007
Respostas 2
Participantes 2