我的项目有一个问题,因为我的目标是让用户用数组中的项目手动填充 6 个字段;我想到了 6 个具有相同项目的 JComboBox,当您在一个框中选择一个项目时,它在其余的框中将被禁用。我正在开始,虽然我已经搜索过,但我只找到了在其构造函数内执行此操作的方法。
cb1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(cb1.getSelectedIndex()==1) {
// this is as far as I go, but disables the entire jcombobox
cb2.setEnabled(false);
// this is more like I want, but it doesn't work.
cb2.setSelectedIndex(1).setEnabled(false);
}}});
如果有人知道一种更有效的方法来使用户可以手动将数组项分配到许多字段,我会欢迎它。
最佳答案
您无法禁用JComboBox
的项目。您可以将其从以下位置删除,具体方法如下:-
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class Combobox extends JFrame{
Combobox(){
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String[] list={"car","bus","bike"};
final JComboBox c1=new JComboBox(list);
final JComboBox c2=new JComboBox(list);
Container c=this.getContentPane();
c.setLayout(new FlowLayout());
c.add(c1);
c.add(c2);
c1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
int index=c1.getSelectedIndex();
c2.removeItemAt(index);
}
});
this.pack();
}
public static void main(String[] args) {
new Combobox();
}
}
final JComboBox c1=new JComboBox(list);
将使 JComboBox
具有 list
的项目。使用 final
是因为 c1 在用于单击事件的内部类 ActionListener
中调用。 index=c1.getSelectedIndex();
将获取 c1
中所选项目的索引位置
。 c2.removeItemAt(index);
将删除位于 c2 的 index
位置的项目。由于c1
和c2
都包含相似的项目,因此项目的index
位置是相同的。
如果您想在某个时刻重新插入 c2 中的项目,那么
使用
index=c1.getSelectedIndex();
item=c2.getItemAtIndex(index);
c2.removeItemAt(index);
然后使用恢复项目
c2.insertItemAt(item,index);
注意 - 如果要在 ActionListener
外部使用,index
和 item
应该在 ActionListener
外部声明。
关于java - 如何从监听器禁用 Jcombobox 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658777/