それを行うには自動的な方法が存在しないため:( 私は私の値とキーを維持するために地図を使用しています
private TreeMap <Integer, String> categoryMap = new TreeMap<Integer, String>();
private JComboBox comboCategory = new JComboBox();
。
は、すべてのカテゴリ(キー、値)を取得し、地図やコンボ
private void addComboColumnData() {
try {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection(conURL);
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT id, name FROM categories");
comboCategory.removeAllItems();
comboCategory.addItem(""); // blank value.
categoryMap.clear();
while(rs.next()){
String name = rs.getString("name");
comboCategory.addItem(name);
categoryMap.put(rs.getInt("id"), name);
}
rs.close();
conn.close();
} catch (Exception e){
JOptionPane.showMessageDialog(this, e.toString());
e.printStackTrace();
}
}
FOを取り込みますurth私のJTableの列のは
// set the fourth column as combo
TableColumn categoryColumn = tableData.getColumnModel().getColumn(4);
categoryColumn.setCellEditor(new DefaultCellEditor(comboCategory));
コンボボックスの値を編集し、それがテキストを表示するが、データベーステーブルの値を更新するために、私は、整数キーを取得する必要があり、コンボボックスにする必要があります。データベースの更新のために
// show Category name in text in the category field.
if(columnNames[i].equalsIgnoreCase("category")){
Object obj = rs.getObject(i+1);
if(obj != null && (obj instanceof Integer))
row[i] = (String) categoryMap.get((Integer) obj);
}
、ここ
Object value = tableData.getModel().getValueAt(rowIndex, 4);
int categoryID = 0;
if(value!= null){
if (value instanceof String && !((String)value).isEmpty()) {
categoryID = getKeyForValue((String)value);
} else if(value instanceof Number) {
categoryID = (Integer) value;
}
}
とgetKeyForValue、
private int getKeyForValue(String value) {
for (Entry<Integer, String> entry : categoryMap.entrySet()) {
if (entry.getValue().equals(value)) {
return entry.getKey();
}
}
return 0;
}
時には私は嫌いjava..to単純なタスクには非常に多くのコードがあります – aswzen