我似乎不理解事件等概念。在阅读了有关如何实现侦听器等内容的一段时间后,我发现 Java 教程说我应该扩展AbstractListModel
触发数据事件。由于某种原因它仍然不起作用。
我做错了什么吗?
以及预计会出现什么样的代码addListDataListener(ListDataListener l)
让它发挥作用?因为我也不明白这一点。
public class CarComboBox extends AbstractListModel<Object> implements ComboBoxModel<Object> {
private JdbcRowSet jdbc;
private int size = 0;
private String selection;
public CarComboBox() {
try {
jdbc = new Query().getCarInfo();
jdbc.beforeFirst();
while (jdbc.next()) {
size++;
}
jdbc.beforeFirst();
}
catch (SQLException ex) {
System.err.println(ex.toString());
}
}
@Override
public void setSelectedItem(Object anItem) {
selection = (String) anItem;
}
@Override
public Object getSelectedItem() {
return selection;
}
@Override
public void addListDataListener(ListDataListener l) {
}
@Override
public void removeListDataListener(ListDataListener l) {
}
@Override
public int getSize() {
return size;
}
@Override
public String getElementAt(int index) {
try {
jdbc.absolute(index + 1);
return jdbc.getString(2);
}
catch (SQLException ex) {
System.out.println(ex.toString());
}
return null;
}
}
要将侦听器添加到 CarComboBox,我执行以下操作:
CarComboBox ccb = new CarComboBox();
ccb.addListDataListener(new ListDataListener()
我猜你用的是官方的tutorial http://download.oracle.com/javase/tutorial/uiswing/components/combobox.html.
但是,您不应该接触 ListModel 和 ComboBoxModel。这些是您可能不需要的更高级功能。
本教程中的 4 个示例不使用 ListModel 和 ComboBoxModel。
如果您使用标准 JComboBox(无 ListModel 或 ComboBoxModel),那么当有人进行选择时,会出现一个ActionEvent
被解雇了。这个事件是由 Swing 神奇地触发的;您不必担心它是如何生成的。然而,您的责任是让一些(零个、一个或多个)对象能够接收 ActionEvent 并对其执行某些操作:
public class MyClass implements ActionListener {
JComboBox comboBox = ...;
...
// You must register explicitly every ActionListener that you
// want to receive ActionEvent's from comboBox.
// Here we register this instance of MyClass.
comboBox.addActionListener(this);
...
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JComboBox) {
System.out.println("MyClass registered an ActionEvent from a JComboBox.");
System.out.println("Selected: " +
((JComboBox) e.getSource()).getSelectedItem());
}
}
}
请注意,如果您没有由不同的 Swing 组件触发任何其他 ActionEvent,则您可以
可以跳过if (e.getSource() instanceof JComboBox)
因为您知道您的 ActionEvent 始终来自 JComboBox。
在我的示例中,JComboBox 位于 MyClass 内部,但它不一定是:
JComboBox comboBox = ...;
MyClass myClass = ...;
comboBox.addActionListener(myClass);
...
comboBox.addActionListener(someOtherActionListener);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)