Graças a alguns amigos do portal Java consegui um tutorial para autocompletar JComboBox ao digitar, mas tive que fazer algumas alterações para se enquadrar no programa que estou fazendo, só que tem um problema: Quando se digita muito rápido, da erro ao autocompletar.
Quem puder me ajudar segue-se abaixo o código:
(Desde já obrigado).
//Visualização / Impressão Planos de Retíficas //////
//Desenvolvido por Marcelo Ferraz de Aguirre ///////
//xx/xx/xxx // última autalização: xx/xx/xx ///////
package classe;
import java.awt.;
import java.awt.event.;
import java.sql.;
import javax.swing.;
import javax.swing.text.JTextComponent;
//------------------------------------------------------------------------
public class Planos extends JFrame implements KeyListener, ActionListener {
Container c = new Container();
JComboBox CodPln_t = new JComboBox();
JComboBox CodProd_t = new JComboBox();
JComboBox NomeProd_t = new JComboBox();
JComboBox CodPln = new JComboBox();
JComboBox CodProd = new JComboBox();
JComboBox NomeProd = new JComboBox();
JComboBox Maq = new JComboBox();
JComboBox Ferram = new JComboBox();
JLabel Rotulo[] = new JLabel[8];
JTextComponent CodPln_tE;
JTextComponent CodProd_tE;
JTextComponent NomeProd_tE;
JTextComponent CodPlnE;
JTextComponent CodProdE;
JTextComponent NomeProdE;
JTextComponent MaqE;
JTextComponent FerramE;
boolean espera = false;
boolean NC;
static Connection Base = null;
static String var_CPn; static String var_CPn_t;
static String var_CPd; static String var_CPd_t;
static String var_NP; static String var_NP_t;
static String var_Maq; static String ferramenta;
public static void main(String[]args) {new Planos().show();}
//------------------------------------------------------------------------
public Planos() {
setTitle(“Visualização / Impressão de Planos de Retíficas”);
int largura = 550; int altura = 480;
setSize(new Dimension(largura, altura));
Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((tela.width - largura)/2,(tela.height - altura)/2);
c = getContentPane();
c.setLayout(null);
for(int i = 0; i <=7; i++) {
Rotulo[i] = new JLabel();
Rotulo[i].setForeground(Color.blue);
Rotulo[i].setFont(new Font("Arial", Font.PLAIN, 12));
}
CodPln_t.reshape ( 80, 70,150, 20);
Rotulo[0].reshape ( 80, 50,150, 20);
CodProd_t.reshape ( 80,170,150, 20);
Rotulo[1].reshape ( 80,150,150, 20);
NomeProd_t.reshape( 80,230,150, 20);
Rotulo[2].reshape ( 80,210,150, 20);
CodPln.reshape (320, 70,150, 20);
Rotulo[3].reshape (320, 50,150, 20);
CodProd.reshape (320,170,150, 20);
Rotulo[4].reshape (320,150,150, 20);
NomeProd.reshape (320,230,150, 20);
Rotulo[5].reshape (320,210,150, 20);
Maq.reshape (200,320,150, 20);
Rotulo[6].reshape (200,300,150, 20);
Ferram.reshape (320,385,150, 20);
Rotulo[7].reshape ( 80,385,230, 20);
CodPln_tE = (JTextComponent) CodPln_t.getEditor().getEditorComponent();
CodProd_tE = (JTextComponent) CodProd_t.getEditor().getEditorComponent();
NomeProd_tE = (JTextComponent) NomeProd_t.getEditor().getEditorComponent();
CodPlnE = (JTextComponent) CodPln.getEditor().getEditorComponent();
CodProdE = (JTextComponent) CodProd.getEditor().getEditorComponent();
NomeProdE = (JTextComponent) NomeProd.getEditor().getEditorComponent();
MaqE = (JTextComponent) Maq.getEditor().getEditorComponent();
FerramE = (JTextComponent) Ferram.getEditor().getEditorComponent();
CodPln_t.setEditable(true);
CodProd_t.setEditable(true);
NomeProd_t.setEditable(true);
CodPln.setEditable(true);
CodProd.setEditable(true);
NomeProd.setEditable(true);
Maq.setEditable(true);
Ferram.setEditable(true);
Rotulo[0].setText("Código do Plano:"); Rotulo[1].setText("Código do Produto:");
Rotulo[2].setText("Nome do Produto:"); Rotulo[3].setText("Código do Plano:");
Rotulo[4].setText("Código do Produto:");Rotulo[5].setText("Nome do Produto:");
Rotulo[6].setText("Máquina:"); Rotulo[7].setText("A quais produtos pertence a ferramenta:");
for(int i = 0; i <=7; i++) c.add(Rotulo[i]);
try{
String win = “com.sun.java.swing.plaf.windows.WindowsLookAndFeel”;
UIManager.setLookAndFeel(win);
SwingUtilities.updateComponentTreeUI(this);
}
catch(UnsupportedLookAndFeelException exc) {}
catch(ClassNotFoundException exc) {}
catch(InstantiationException exc) {}
catch(IllegalAccessException exc) {}
this.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e) {
System.exit(0); try{Base.close();} catch(SQLException erro){}}});
c.add(CodPln_t); c.add(CodProd_t); c.add(NomeProd_t);
c.add(CodPln); c.add(CodProd); c.add(NomeProd);
c.add(Maq); c.add(Ferram);
conexao();
encheCombo();
CodPln_t.setSelectedItem(null);
CodProd_t.setSelectedItem(null);
NomeProd_t.setSelectedItem(null);
CodPln.setSelectedItem(null);
CodProd.setSelectedItem(null);
NomeProd.setSelectedItem(null);
Ferram.setSelectedItem(null);
CodPln_tE.addKeyListener(this);
CodProd_tE.addKeyListener(this);
NomeProd_tE.addKeyListener(this);
CodPlnE.addKeyListener(this);
CodProdE.addKeyListener(this);
NomeProdE.addKeyListener(this);
MaqE.addKeyListener(this);
FerramE.addKeyListener(this);
Ferram.addActionListener(this);
CodPln_t.addActionListener(this);
CodProd_t.addActionListener(this);
NomeProd_t.addActionListener(this);
CodPln.addActionListener(this);
CodProd.addActionListener(this);
NomeProd.addActionListener(this);
Maq.addActionListener(this);
}
//------------------------------------------------------------------------
public void conexao(){
try{
String dir = String.valueOf(System.getProperty(“user.dir”));
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Base = DriverManager.getConnection(
“jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=”+ //dir +
“R:\PlanoRetificas” +
“\Plano de retíficas.mdb”,
“Admin”,“val”);}
catch(ClassNotFoundException erro){System.out.println("Falha: "
+ erro);
}
catch(SQLException erro){System.out.println("Falha na sql: "
+ erro);
}
}
//------------------------------------------------------------------------
public void encheCombo(){
String SQL = "SELECT PLANO.PLNOVO, Sum(PLANO.ROT) " +
"FROM PLANO GROUP BY PLANO.PLNOVO;";
try{
Statement dadosA = Base.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet CodPln_a = dadosA.executeQuery(SQL);
CodPln_a.first();
while(!CodPln_a.isLast()){
CodPln_t.addItem(String.valueOf(CodPln_a.getInt("PLNOVO")));
CodPln.addItem(String.valueOf(CodPln_a.getInt("PLNOVO")));
CodPln_a.next();
}
dadosA.close();
CodPln_a.close();}
catch(SQLException erro){System.out.println(erro);}
try{
SQL = "SELECT FERR.CODPROD, Sum(FERR.QUANTIDADE) AS SomaDeQUANTIDADE " +
“FROM FERR GROUP BY FERR.CODPROD;”;
Statement dadosB = Base.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet CodProd_a = dadosB.executeQuery(SQL);
CodProd_a.first();
while(!CodProd_a.isLast()){
CodProd_t.addItem(CodProd_a.getString("CODPROD"));
CodProd.addItem(CodProd_a.getString("CODPROD"));
CodProd_a.next();
}
dadosB.close();
CodProd_a.close();
}
catch(SQLException erro){System.out.println(erro);}
try{
SQL = "SELECT FERR.PRODUTO, Sum(FERR.QUANTIDADE) AS SomaDeQUANTIDADE " +
"FROM FERR GROUP BY FERR.PRODUTO;";
Statement dadosC = Base.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet NomeProd_a = dadosC.executeQuery(SQL);
NomeProd_a.first();
while(!NomeProd_a.isLast()){
NomeProd_t.addItem(NomeProd_a.getString("PRODUTO"));
NomeProd.addItem(NomeProd_a.getString("PRODUTO"));
NomeProd_a.next();
}
dadosC.close();
NomeProd_a.close();
}
catch(SQLException erro){System.out.println(erro);}
SQL = "SELECT FERR.DESENHO, Sum(FERR.QUANTIDADE) AS SomaDeQUANTIDADE "+
“FROM FERR GROUP BY FERR.DESENHO;”;
try{
Statement IFer = Base.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet Ferra = IFer.executeQuery(SQL);
Ferra.first();
while(!Ferra.isAfterLast()){
Ferram.addItem(Ferra.getString(“DESENHO”));
Ferra.next();
}
IFer.close();
Ferra.close();}
catch(SQLException erro){System.out.println(erro);}
}
//------------------------------------------------------------------------
private void procuraMaq(String maquina) {
try{
String DEL = “DELETE * FROM tbl_temp”;
Statement Apag = Base.createStatement();
Statement Cria = Base.createStatement();
Apag.executeUpdate(DEL);
String SQL;
if(NC == true)
SQL = "SELECT FERR.MAQUINA FROM FERR WHERE FERR.PRODUTO = '" + maquina + "';";
else
SQL = "SELECT FERR.MAQUINA FROM FERR WHERE FERR.CODPROD = '" + maquina + "';";
Statement EncheM = Base.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet EncheMaq = EncheM.executeQuery(SQL);
EncheMaq.first();
while(!EncheMaq.isLast()){
Cria.executeUpdate("INSERT INTO tbl_temp ( maquina, cont ) " +
"SELECT '" + EncheMaq.getString("Maquina") + "' AS Expr1, 1 AS Expr2;");
EncheMaq.next();
}
}
catch(SQLException erro){System.out.println(erro);}
inserirMaq();
}
//------------------------------------------------------------------------
public void inserirMaq(){
String SQL;
try{
SQL = "SELECT tbl_temp.maquina, Sum(tbl_temp.cont) AS SomaDecont " +
“FROM tbl_temp GROUP BY tbl_temp.maquina ORDER BY tbl_temp.maquina;”;
Statement dadosD = Base.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet Maq_a = dadosD.executeQuery(SQL);
Maq_a.first();
Maq.removeAllItems();
while(!Maq_a.isLast()){
Maq.addItem(Maq_a.getString("maquina"));
Maq_a.next();
}
dadosD.close();
Maq_a.close();
}
catch(SQLException erro){System.out.println(erro);}
}
//------------------------------------------------------------------------
public void actionPerformed(ActionEvent e) {
Ferram.removeActionListener(this);
CodPln_t.removeActionListener(this);
CodProd_t.removeActionListener(this);
NomeProd_t.removeActionListener(this);
CodPln.removeActionListener(this);
CodProd.removeActionListener(this);
NomeProd.removeActionListener(this);
Maq.removeActionListener(this);
if(e.getSource().equals(NomeProd)) {
if(!String.valueOf(NomeProd.getSelectedItem()).equals("")){
NC = true;
procuraMaq(String.valueOf(NomeProd.getSelectedItem()));
var_NP = String.valueOf(NomeProd.getSelectedItem());
var_CPd = "555"; var_CPn = "555";
CodProd.setSelectedItem(null);
Maq.setSelectedItem(null);
CodPln.setSelectedItem(null);}
}
if(e.getSource().equals(CodProd)){
if(!String.valueOf(CodProd.getSelectedItem()).equals("")){
NC = false;
procuraMaq(String.valueOf(CodProd.getSelectedItem()));
var_CPd = String.valueOf(CodProd.getSelectedItem());
var_NP = "555"; var_CPn = "555";
NomeProd.setSelectedItem(null);
Maq.setSelectedItem(null);
CodPln.setSelectedItem(null);}
}
if(e.getSource().equals(CodPln)) {
if(!String.valueOf(CodPln.getSelectedItem()).equals("")){
var_CPn = String.valueOf(CodPln.getSelectedItem());
var_NP = "555"; var_CPd = "555";
NomeProd.setSelectedItem(null);
Maq.setSelectedItem(null);
CodProd.setSelectedItem(null);
new Impressao();}
}
// maq antiga
if(e.getSource().equals(NomeProd_t)) {
if(!String.valueOf(NomeProd_t.getSelectedItem()).equals("")){
var_NP_t = String.valueOf(NomeProd_t.getSelectedItem());
var_CPd_t = "555"; var_CPn_t = "555";
CodProd_t.setSelectedItem(null);
CodPln_t.setSelectedItem(null);}
}
if(e.getSource().equals(CodProd_t)){
JOptionPane.showMessageDialog(this,"palavra: '"+CodProd_t.getSelectedItem()+"'.");
if(!String.valueOf(CodProd_t.getSelectedItem()).equals("")){
var_CPd_t = String.valueOf(CodProd_t.getSelectedItem());
var_NP_t = "555"; var_CPn_t = "555";
NomeProd_t.setSelectedItem(null);
CodPln_t.setSelectedItem(null);}
}
if(e.getSource().equals(CodPln_t)) {
if(!String.valueOf(CodPln_t.getSelectedItem()).equals("")){
var_CPn_t = String.valueOf(CodPln_t.getSelectedItem());
var_NP_t = "555"; var_CPd_t = "555";
NomeProd_t.setSelectedItem(null);
CodProd_t.setSelectedItem(null);}
}
if(e.getSource().equals(Maq)){
if(!String.valueOf(Maq.getSelectedItem()).equals("")){
var_Maq = String.valueOf(Maq.getSelectedItem());
CodProd_t.setSelectedItem(null);
NomeProd_t.setSelectedItem(null);
CodPln.setSelectedItem(null);
NomeProd.setSelectedItem(null);
CodProd.setSelectedItem(null);
Maq.setSelectedItem(null);
new Impressao();}
}
if(e.getSource().equals(Ferram)) {
if(!String.valueOf(Ferram.getSelectedItem()).equals("")){
ferramenta = String.valueOf(Ferram.getSelectedItem());
Ferram.setSelectedItem(null);
new Pesquisa();
}
}
Ferram.addActionListener(this);
CodPln_t.addActionListener(this);
CodProd_t.addActionListener(this);
NomeProd_t.addActionListener(this);
CodPln.addActionListener(this);
CodProd.addActionListener(this);
NomeProd.addActionListener(this);
Maq.addActionListener(this);
}
//------------------------------------------------------------------------
public void paint(Graphics g){
super.paint(g);
g.drawRect( 50, 60,210, 80); g.drawRect(290, 60,210, 80);
g.drawRect( 50,160,210,150); g.drawRect(290,160,210,150);
g.drawRect( 50,330,450, 50); g.drawRect( 50,400,450, 50);
g.setFont(new Font(“Arial”, Font.BOLD, 16));
g.setColor(Color.blue);
g.drawString(“Plano Atual (Em Máquina)”,50,50);
g.drawString(“Plano Novo (A Separar)”,290,50);
}
//------------------------------------------------------------------------
public static String procuraFer(){
String SQL;
SQL = "SELECT PLANO.PLNOVO, PLANOAD.LOCAL, PLANO.MAQUINA, FERR.PRODUTO, PLANOAD.VERSAO, PLANO.DIFINAL, PLANO.CLDI, "+
"PLANO.Tipo , PLANO.CodProd, PLANO.Opera, PLANO.Repc, PLANO.COPICS, PLANO.Obs, PLANO.PCREB, PLANO.COMP, PLANO.PCCL, "+
"PLANO.Nota , PLANO.Data1, PLANO.Data, PLANO.Emiten, PLANO.Alterador, PLANO.ROT "+
"FROM FERR INNER JOIN (PLANO INNER JOIN PLANOAD ON PLANO.CODPROD = PLANOAD.CODPROD) ON FERR.CODPROD = PLANOAD.CODPROD "+
“WHERE PLANO.PLNOVO = " + var_CPn_t + " OR PLANO.MAQUINA = '” + var_Maq + “’ AND PLANO.CODPROD = '” + var_CPd_t + "’ OR "+
“PLANO.MAQUINA = '” + var_Maq + “’ AND FERR.PRODUTO = '” + var_NP_t + “’;”;
System.out.println("var_CPn_t: "+var_CPn_t);
try{
Statement compara = Base.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet comp = compara.executeQuery(SQL);
comp.first();
return comp.getString("PLNOVO");
}
catch(SQLException erro){System.out.println(erro);return "9999999";}
}
//------------------------------------------------------------------------
public void autoComplete(int cod, JComboBox combo, JTextComponent comboT){
String dig = comboT.getText();
if(cod == 8) dig = dig.substring(0,dig.length()-1);
if(cod != 16 && cod != 10 && cod != 38 && cod != 40 && cod != 129 && cod != 128 && cod != 36){
if(dig.length() > 0){
for(int i = 0; i <= combo.getItemCount(); i++){
if(String.valueOf(combo.getItemAt(i)).length() >= dig.length()){
if(String.valueOf(combo.getItemAt(i)).substring(0,dig.length()).toUpperCase().equals(dig.toUpperCase())){
comboT.setSelectionStart(dig.length());
combo.removeActionListener(this);
combo.setSelectedItem(combo.getItemAt(i));
combo.addActionListener(this);
combo.setPopupVisible(true);
comboT.setText(String.valueOf(combo.getItemAt(i)));
comboT.setSelectionStart(dig.length());
break;
}
}
}
}
else comboT.setText(null);
}
if(cod == 10){
combo.setSelectedItem(comboT.getText());
comboT.setSelectionStart(0);
}
}
//------------------------------------------------------------------------
public void keyReleased(KeyEvent e) {
if(e.getSource().equals(CodPln_tE))
autoComplete(e.getKeyCode(), CodPln_t, CodPln_tE);
if(e.getSource().equals(CodProd_tE))
autoComplete(e.getKeyCode(), CodProd_t, CodProd_tE);
if(e.getSource().equals(NomeProd_tE))
autoComplete(e.getKeyCode(), NomeProd_t, NomeProd_tE);
if(e.getSource().equals(CodPlnE))
autoComplete(e.getKeyCode(), CodPln, CodPlnE);
if(e.getSource().equals(CodProdE))
autoComplete(e.getKeyCode(), CodProd, CodProdE);
if(e.getSource().equals(NomeProdE))
autoComplete(e.getKeyCode(), NomeProd, NomeProdE);
if(e.getSource().equals(MaqE))
autoComplete(e.getKeyCode(), Maq, MaqE);
if(e.getSource().equals(FerramE))
autoComplete(e.getKeyCode(), Ferram, FerramE);
}
//------------------------------------------------------------------------
public void keyTyped (KeyEvent e) {}
public void keyPressed (KeyEvent e) {
}
//------------------------------------------------------------------------
public static String getvar_CPn() {return var_CPn;}
public static String getvar_CPd() {return var_CPd;}
public static String getvar_NP() {return var_NP;}
public static String getvar_Maq() {return var_Maq;}
public static String getvar_CPn_t() {return var_CPn_t;}
public static String getvar_CPd_t() {return var_CPd_t;}
public static String getvar_NP_t() {return var_NP_t;}
public static String getferramenta() {return ferramenta;}
// ------------------------------------------------------------------------
//------------------------------------------------------------------------
}