gpt4 book ai didi

java - 如果满足条件,则取消 JComboBox 上的选择更改(例如,对传入选择的验证)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:03:18 27 4
gpt4 key购买 nike

我正在尝试动态验证由 JComboBox 选择的项目,并且我想在验证不正确的情况下取消选择更改。有什么办法可以实现吗?

private ItemListener itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
if (true) CANCEL_CHANGE;
}
}
};

我尝试定义一个包含旧值的 var,取消注册监听器,并手动选择到以前的状态,但是第一次更改时出现问题,因为 var 未初始化并且无法保留原始值.

我也尝试过使用 ActionListener,但找不到以编程方式取消更改的方法,而且我不需要触发事件,所以没有更改,但我正在评估手动设置选择的可能性,所以我恢复到 ItemListener。

最佳答案

在最初的情况下,当先前的选择不存在时,只需将其默认为默认选择索引,例如 0。

查看下面的示例代码:

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;


import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TestChangeListener {

final JTextField jTextField = new JTextField(20);
Object list[] = { "ItemA", "ItemB" };
int oldSelectionIndex = -1;
final JComboBox jComboBox = new JComboBox(list);

void init() {
JFrame jFrame = new JFrame("Test");
JPanel jPanel = new JPanel();
new TestChangeListener();
jPanel.add(jTextField);
jPanel.add(jComboBox);
jFrame.add(jPanel);
jComboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
if (!"Okay".equalsIgnoreCase(jTextField.getText())) {
if (oldSelectionIndex < 0) {
jComboBox.setSelectedIndex(0);
} else {
jComboBox.setSelectedIndex(oldSelectionIndex);
}
} else {
oldSelectionIndex = jComboBox.getSelectedIndex();
}
}
}
});
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
}

public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestChangeListener().init();
}
});
}
}

第一次当 textField 不包含任何数据时,它只选择默认项,在本例中是第 0 个元素,您可以拥有它。如果存在数据,它会检查并决定是否应使用当前选择。

关于java - 如果满足条件,则取消 JComboBox 上的选择更改(例如,对传入选择的验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705468/

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