gpt4 book ai didi

java - 我如何在将项目添加到组合框时停止触发 swing JComboBox itemlistener。

转载 作者:行者123 更新时间:2023-11-29 03:39:25 25 4
gpt4 key购买 nike

我想要一个包含发票列表的 JCombox。如果我选择发票,它将填写表格。通过选择“买方”组合框加载发票。 invoices 组合框有 itemStateChanged 事件。问题是当我选择买家时,表格填写了第一张发票(发票组合框中的第一项)。所以我在发票组合框中将 selected index in 设置为 -1。我得到了同样的结果。

订单的 toString 方法返回发票号。


for (Order O : orderList) {
jcbInvoiceNos.addItem(O);
}

jcbInvoiceNos.setSelectedIndex(-1);

 private void addInvoiceNoItemChangeListener() {
jcbInvoiceNos.addItemListener(new ItemListener() {

@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
loadInvoiceDetails();
}
}
});
}

public void loadInvoiceDetails() {
System.out.println("Selected index " + jcbInvoiceNos.getSelectedIndex());
}

这总是打印Selected index 0 这应该是Selected index -1 我第一次选择买家。我想通过选择发票来填写。不是买家。

请给我一个解决方案。

最佳答案

原因是 DefaultComboBoxModel 的实现:当将第一项添加到空模型中时,它会自动选择第一项。有点不一致的是,它仅在使用 addElement(Object) 时才这样做,而不是在使用 insertElement(Object, size) 时这样做未记录的实现细节 ;-) 是使用后者:

// loading the invoice ids
combo.removeAllItems();
for (int i = 0; i < 20; i++) {
combo.insertItemAt("combo: " + count + " item: " + i, i);
}

另一方面,最初显示“信息性”所选项目(如 f.i.“未选择发票”)可能更便于用户使用。如果您填充模型(而不是组合,它不接受未包含在列表中的选定项目),则可以完成此操作,例如:

// the informational item
Object noInvoice = "no invoice selected";

// loading the invoice ids
model.removeAllElements();
model.setSelectedItem(noInvoice);
for (int i = 0; i < 20; i++) {
model.addElement("model: " + count + " item: " + i);
}

// the itemListener ignoring the informational item
if (ItemEvent.SELECTED == e.getStateChange()) {
if (noInvoice.equals(e.getItem())) return;
doLoadDetails(e.getItem());
}

关于java - 我如何在将项目添加到组合框时停止触发 swing JComboBox itemlistener。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13856471/

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