Java 将值从数据库检索到组合框中
我使用以下程序从我的sql数据库中检索值到combobox。如果我使用ResultSet从mysql数据库中选择JComboBox中的第一项,它不会显示第一项名称的id值。如果我在组合框(结果集)中选择了第二项 它显示第二个选定项目名称的id值。在我点击第一个项目后,它会在标签框中显示第一个项目Id值。我的问题是第一个项目名称在标签框中没有显示ID值,这意味着我的第一个记录集值没有显示ID值Java 将值从数据库检索到组合框中,java,swing,combobox,jcombobox,Java,Swing,Combobox,Jcombobox,我使用以下程序从我的sql数据库中检索值到combobox。如果我使用ResultSet从mysql数据库中选择JComboBox中的第一项,它不会显示第一项名称的id值。如果我在组合框(结果集)中选择了第二项 它显示第二个选定项目名称的id值。在我点击第一个项目后,它会在标签框中显示第一个项目Id值。我的问题是第一个项目名称在标签框中没有显示ID值,这意味着我的第一个记录集值没有显示ID值 package javacmbx; import java.sql.*; import java.a
package javacmbx;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class comboautosuggest extends javax.swing.JFrame {
Vector v=new Vector();
Vector v1=new Vector();
Statement TmpSqlStmnt;
ResultSet TmpSqlRs;
Connection con;
int CateId;
JTextField Txt01;
TreeMap Map=new TreeMap();
public comboautosuggest() {
initComponents();
}
public void AutoSuggest() {
Txt01=(JTextField)Cbx01.getEditor().getEditorComponent();
Txt01.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e)
{
EventQueue.invokeLater(new Runnable()
{
public void run(){
String text =Txt01.getText();//.toUpperCase();
if(text.length()==0)
{
Cbx01.hidePopup();
setModel(new DefaultComboBoxModel(v1), "");
}
else{
DefaultComboBoxModel m = getSuggestedModel(v1, text);
if(m.getSize()==0 ) {
Cbx01.hidePopup();
}
else{
setModel(m, text);
Cbx01.showPopup();
}
}
}
});
}
/*public void keyPressed(KeyEvent e)
{
String text = Txt01.getText();
int code = e.getKeyCode();
if(code==KeyEvent.VK_ENTER) {
if(!v1.contains(text)) {
v1.addElement(text);
}
hide_flag = true;
}else if(code==KeyEvent.VK_ESCAPE) {
hide_flag = true;
}else if(code==KeyEvent.VK_RIGHT) {
for(int i=0;i<v1.size();i++) {
String str = (String) v1.elementAt(i);
if(str.startsWith(text))
{
Txt01.setText(str);
return;
}
}
}
}*/
});
try{
Class.forName("com.mysql.jdbc.Driver");
con =DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","root");
TmpSqlStmnt=con.createStatement();
TmpSqlRs=TmpSqlStmnt.executeQuery ("SELECT location,pincode FROM combovalue ORDER BY location");
System.out.println("DB Connected");
TmpSqlRs.first();
do
{
String s= TmpSqlRs.getString("location");
Cbx01.addItem(s);
CateId=TmpSqlRs.getInt("pincode");
v1.addElement(s);
v.addElement(CateId);
Map.put(s, CateId);
Cbx01.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
Lbl01.setText(Map.get(Cbx01.getSelectedItem()).toString());
}
}
});
}while(TmpSqlRs.next());
}catch(Exception e){
System.out.println(e);
}
}
private boolean hide_flag = false;
private void setModel(DefaultComboBoxModel mdl, String str) {
Cbx01.setModel(mdl);
Txt01.setText(str);
}
private static DefaultComboBoxModel getSuggestedModel(java.util.List<String> list, String text) {
DefaultComboBoxModel m = new DefaultComboBoxModel();
for(String s: list) {
if(s.startsWith(text)) m.addElement(s);
}
return m;
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
Cbx01 = new javax.swing.JComboBox();
Lbl01 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
Cbx01.setEditable(true);
Cbx01.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
Cbx01KeyPressed(evt);
}
public void keyTyped(java.awt.event.KeyEvent evt) {
Cbx01KeyTyped(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(57, 57, 57)
.addComponent(Cbx01, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(50, 50, 50)
.addComponent(Lbl01, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(77, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(88, 88, 88)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Lbl01, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Cbx01, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(190, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void Cbx01KeyPressed(java.awt.event.KeyEvent evt) {
//Txt01=(JTextField)Cbx01.getEditor().getEditorComponent();
}
private void Cbx01KeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
comboautosuggest Tmpcas=new comboautosuggest();
Tmpcas.AutoSuggest();
Tmpcas.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JComboBox Cbx01;
private javax.swing.JLabel Lbl01;
// End of variables declaration
}
包javacmbx;
导入java.sql.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
公共类comboautosuggest扩展了javax.swing.JFrame{
向量v=新向量();
向量v1=新向量();
报表TMPSQLSTNT;
结果设置TmpSqlRs;
连接con;
内链;
JTextField Txt01;
TreeMap Map=newtreemap();
公共组合自动建议(){
初始化组件();
}
public void AutoSuggest(){
Txt01=(JTextField)Cbx01.getEditor().getEditorComponent();
addKeyListener(新的KeyAdapter(){
public void keyTyped(KeyEvent e)
{
invokeLater(新的Runnable()
{
公开募捐{
String text=Txt01.getText();//.toUpperCase();
如果(text.length()==0)
{
Cbx01.hidePopup();
setModel(新的DefaultComboxModel(v1),“”);
}
否则{
DefaultComboxModel m=getSuggestedModel(v1,文本);
如果(m.getSize()==0){
Cbx01.hidePopup();
}
否则{
setModel(m,text);
Cbx01.showPopup();
}
}
}
});
}
/*按下公共无效键(按键事件e)
{
String text=Txt01.getText();
int code=e.getKeyCode();
if(code==KeyEvent.VK_ENTER){
如果(!v1.contains(text)){
v1.附录(文本);
}
hide_flag=true;
}else if(code==KeyEvent.VK_ESCAPE){
hide_flag=true;
}else if(code==KeyEvent.VK_RIGHT){
对于(int i=0;i当您从数据库加载记录时,您在while
-循环中做两件事:
将项目添加到JComboBox
将itemstener
添加到JComboBox
这有两个含义:首先,您要添加多个项侦听器,即每个记录一个。每当您更改所选值时,所有项侦听器都将被触发。由于它们都执行相同的操作,因此无需声明多个项侦听器。移动Cbx01.addItemListener(new ItemListener(){…});
在循环之外
其次,在第一个项目本身之后添加项目侦听器。因此,添加第一个值根本无法触发侦听器,因此不会显示id(如果再次使用鼠标选择第一个项目,则会显示id)
我建议您将addItemListener
移动到循环之前。一个好地方是实例化JComboBox
本身。即使我将addItemListener移动到循环之前。它显示了相同的问题。还有其他解决方案。请帮助我解决此问题。