gpt4 book ai didi

java - 将数据库中的值检索到组合框中

转载 作者:行者123 更新时间:2023-12-02 08:00:46 26 4
gpt4 key购买 nike

我使用以下程序将值从我的 sql 数据库检索到组合框。如果我使用 ResultSet 从 mysql 数据库选择 JComboBox 中的第一项,它不会显示第一项名称的 id 值。如果我选择组合框中的第二项(结果集)它显示第二个选定项目名称的 id 值。在我单击第一个项目后,它会在标签框中显示第一个项目 Id 值。我的问题是第一个项目名称未在标签框中显示 ID 值,这意味着我的第一个记录集值未显示 id 值?

 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

}

最佳答案

当您从数据库加载记录时,您将在 while 中执行两件事: -循环:

  1. 将项目添加到 JComboBox .
  2. 添加ItemListenerJComboBox .

这有两个含义:首先,您要添加多个项目监听器,即每个记录一个。每当您更改所选值时,所有这些都会被触发。由于它们都执行相同的操作,因此无需声明多个操作。移动Cbx01.addItemListener(new ItemListener() { ... });在循环之外。

其次,在第一个项目本身之后添加项目监听器。因此,添加第一个值根本无法触发监听器,因此不会显示 id(如果您再次使用鼠标选择第一项,则会显示 id)。

我建议您移动addItemListener在循环之前。一个好地方是实例化 JComboBox本身。

关于java - 将数据库中的值检索到组合框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com