Ich versuche, eine Funktion für die schnelle Suche von Clients aus der Datenbank auf einige Tastenanschläge vom Benutzer, mit einer bearbeitbaren Combobox. Was ich haben wollte, ist, dass der Benutzer einige Buchstaben einfügt und wenn diese Buchstaben mit einigen Clients übereinstimmen, bleiben diese Clients im aktuellen Datenmodell der Combobox.
Der Code ist wie folgt. Bitte beheben Sie die im Code auftretende Ausnahme. Danke im Voraus !!Ich bekomme eine IllegalStateException in diesem Code
Exception in thread "AWT-Eventqueue-0" java.lang.IllegalStateException: Versuch Benachrichtigung
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
class ComboSearch extends JFrame implements CaretListener
{
private JComboBox mycombo;
private ArrayList<String> list;
private DefaultComboBoxModel<String> isolatemodel,model;
public ComboSearch()
{
setSize(400, 400);
setLayout(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
mycombo=new JComboBox();
mycombo.setEditable(true);
mycombo.setBounds(30,30, 350, 50);
isolatemodel=new DefaultComboBoxModel();
model=new DefaultComboBoxModel();
list=new ArrayList();
add(mycombo);
mycombo.setModel(isolatemodel);
((JTextField)mycombo.getEditor()
.getEditorComponent()).addCaretListener(this);
setVisible(true);}
private void addElements()
{
list.add("Rambhau, Vijay Nagar");
list.add("Surya, Ashok Puri");
list.add("Mourya, Shahjapur");
list.add("Kishorji & sons, Bhopal");
list.add("Fablica & jewels, Itanagar");
list.add("Guru Kripa,Ujjain");
list.add("Hariram Nai & Bakes, Indore");
list.add("Ganesh Sev Bhandar, Harda");
list.add("Greatsome Higs, Jabalpur");
list.add("Treks and hains, Nalanda");
list.add("Tata Indora, Hoshangabad");
list.add("Paankhai Seth, Madurai");
list.add("Katappa, Shikara");
list.add("Gunjan Samosa, Vijay Nagar");
list.add("Ramesh hustlers , Vijay Nagar");
}
public void makeModels()
{
addElements();
list.stream().forEach((client) -> {
isolatemodel.addElement(client);
});
}
@Override
public void caretUpdate(CaretEvent e)
{
String searchText=((JTextField)mycombo.getEditor()
.getEditorComponent()).getText();
if(!searchText.isEmpty())
{
for(int i=0; i<isolatemodel.getSize();i++)
{
if(isolatemodel.getElementAt(i).contains(searchText))
{
model.removeAllElements();
model.addElement(isolatemodel.getElementAt(i));
}
}
mycombo.setModel(model);
mycombo.showPopup();
}
else
{
mycombo.setModel(isolatemodel);
}
}
}
public class Execute
{
public static void main(String[] args)
{
ComboSearch searchIt=new ComboSearch();
searchIt.makeModels();
}
}
Als erstes setzen Sie das Layout nicht auf 'null'. Das fragt nur nach Problemen. Verwenden Sie stattdessen einen [Layout Manager] (https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html) – Jonah
Ich bekomme auch einen Fehler, dass es keine '.contains()' Methode in gibt Diese if-Anweisung 'if (isolatemodel.getElementAt (i) .contains (searchText))' – Jonah
Ich habe auch den Layout-Manager verwendet. Es ist nicht mit dem :( –