【发布时间】:2015-08-26 06:11:24
【问题描述】:
我有一个加载/重新加载 JComboBox 的方法,我正在使用一个名为 hiddenItem 的类将隐藏值附加到显示值。起初加载 JComboBox 工作良好,但在 Box 重新加载后我收到错误,JComboBox 中的值不是 hiddenItem,那么为什么重新加载后不添加 hiddenItem?也许我需要以某种方式重置或清理 hiddenItem 类?谢谢!
hiddenItem.java:
public class hiddenItem {
String displayValue;
Integer hiddenValue;
//Constructor
public hiddenItem(String d, Integer h) {
displayValue = d;
hiddenValue = h;
}
//Accessor
public Integer get_value() {
return hiddenValue;
}
//Override ToString method
@Override
public String toString() {
return displayValue;
}
}
加载/重新加载方法:
public static void fill_combos() throws SQLException, ParserConfigurationException, XPathExpressionException, SAXException, IOException, PropertyVetoException {
Darbai.onload = true;
ResultSet rs = null;
darb_combo.removeAllItems();
ats_combo.removeAllItems();
darb_combo.addItem(new hiddenItem("ALL", -1));
ats_combo.addItem(new hiddenItem("ALL", -1));
rs = select_data(GET_DARBUOTOJAI, null);
while (rs.next()) {
darb_combo.addItem(new hiddenItem(rs.getString("name") + " " + rs.getString("surname"), rs.getInt("id")));
ats_combo.addItem(new hiddenItem(rs.getString("name") + " " + rs.getString("surname"), rs.getInt("id")));
}
rs.close();
darb_combo.setSelectedIndex(0);
ats_combo.setSelectedIndex(0);
klientas_combo.removeAllItems();
klientas_combo.addItem(new hiddenItem("ALL", -1));
rs = select_data(GET_KLIENTAI, null);
while (rs.next()) {
klientas_combo.addItem(new hiddenItem(rs.getString("customer"), rs.getInt("id")));
}
rs.close();
klientas_combo.setSelectedIndex(0);
busena_combo.removeAllItems();
busena_combo.addItem(new hiddenItem("ALL", -1));
busena_combo.addItem(new hiddenItem("Reikia atlikti", 0));
busena_combo.addItem(new hiddenItem("Skubus", 1));
busena_combo.addItem(new hiddenItem("Vykdoma", 2));
busena_combo.addItem(new hiddenItem("Atlikta", 3));
busena_combo.addItem(new hiddenItem("Užaktuota", 4));
busena_combo.addItem(new hiddenItem("Garantinis", 5));
busena_combo.addItem(new hiddenItem("Objektinis", 6));
AutoCompleteDecorator.decorate(darb_combo);
AutoCompleteDecorator.decorate(ats_combo);
AutoCompleteDecorator.decorate(klientas_combo);
Darbai.onload = false;
}
这是我获得隐藏价值的方法:
if (!Darbai.onload) {
if (e.getStateChange() == ItemEvent.SELECTED) {
ResultSet rs = null;
hiddenItem item = (hiddenItem) e.getItem(); // LINE 805
Integer id = item.get_value();
String val = item.displayValue;
}
}
错误:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to darbai.hiddenItem
at darbai.pagrindinis.itemStateChanged(pagrindinis.java:805)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1329)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:576)
at org.jdesktop.swingx.autocomplete.ComboBoxAdaptor.setSelectedItem(ComboBoxAdaptor.java:104)
at org.jdesktop.swingx.autocomplete.AutoCompleteDocument.setSelectedItem(AutoCompleteDocument.java:317)
at org.jdesktop.swingx.autocomplete.AutoCompleteDocument.remove(AutoCompleteDocument.java:243)
at javax.swing.text.JTextComponent.setText(JTextComponent.java:1672)
at javax.swing.plaf.metal.MetalComboBoxEditor$1.setText(MetalComboBoxEditor.java:61)
at javax.swing.plaf.basic.BasicComboBoxEditor.setItem(BasicComboBoxEditor.java:87)
at org.jdesktop.swingx.autocomplete.AutoCompleteComboBoxEditor.setItem(AutoCompleteComboBoxEditor.java:78)
at javax.swing.JComboBox.configureEditor(JComboBox.java:1403)
at javax.swing.plaf.basic.BasicComboBoxUI$Handler.contentsChanged(BasicComboBoxUI.java:1864)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:576)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:622)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:834)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:498)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
编辑组合定义(由 NetBeans 自动):
public static javax.swing.JComboBox ats_combo;
public static javax.swing.JComboBox busena_combo;
public static javax.swing.JComboBox darb_combo;
public static javax.swing.JComboBox klientas_combo;
darb_combo = new javax.swing.JComboBox();
ats_combo = new javax.swing.JComboBox();
klientas_combo = new javax.swing.JComboBox();
busena_combo = new javax.swing.JComboBox();
darb_combo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
ats_combo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
klientas_combo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
busena_combo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
【问题讨论】:
-
看起来
e.getItem();返回一个字符串 -
但是为什么它应该像第一次加载一样返回 hiddenItem
-
抱歉没能找到你。你把它放到一个隐藏的物品上:
(hiddenItem) e.getItem(); -
您需要重新检查您的代码。毫无疑问,您希望它返回一个 hiddenItem,但无论是语法还是逻辑,您都犯了一个错误。
-
考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将减少混乱并获得更好的响应
标签: java class hidden selecteditem