Java JComboBox是否可以仅将可编辑的true设置为一项?
我想创建一个Java JComboBox是否可以仅将可编辑的true设置为一项?,java,swing,jcombobox,Java,Swing,Jcombobox,我想创建一个JComboBox,上面有三个项目。。我只想将可编辑设置为JComboBox的最后一项,例如: JComboBox cb = new JComboBox(); cb.addItem("Dog"); cb.addItem("Cat"); cb.addItem("Other"); 当我放下JComboBox并选择项目Others.JComboBox可编辑。。我该怎么做呢?这是一个演示(不是我做的),它似乎实现了您的目标。 这里有一个演示(不是我做的),它似乎实现了您的目标。 您可以使
JComboBox
,上面有三个项目。。我只想将可编辑设置为JComboBox
的最后一项,例如:
JComboBox cb = new JComboBox();
cb.addItem("Dog");
cb.addItem("Cat");
cb.addItem("Other");
当我放下JComboBox
并选择项目Others.JComboBox
可编辑。。我该怎么做呢?这是一个演示(不是我做的),它似乎实现了您的目标。
这里有一个演示(不是我做的),它似乎实现了您的目标。
您可以使用来知道选择了哪个项目,然后可以根据需要将JComboBox
设置为可编辑。试试这个例子:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Demo {
private void initGUI(){
Object[] items = new Object[]{"Dog","Cat","Other"};
DefaultComboBoxModel dcbm = new DefaultComboBoxModel(items);
final JComboBox comboBox = new JComboBox(dcbm);
comboBox.setPreferredSize(new Dimension(200, 20));
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Object selectedItem = comboBox.getSelectedItem();
boolean editable = selectedItem instanceof String && ((String)selectedItem).equals("Other");
comboBox.setEditable(editable);
}
});
/*
* Here you can add a new item to your JComboBox when it becomes editable
*/
comboBox.getEditor().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object newItem = comboBox.getEditor().getItem();
DefaultComboBoxModel dcbm = (DefaultComboBoxModel) comboBox.getModel();
dcbm.addElement(newItem);
dcbm.setSelectedItem(newItem);
}
});
JPanel content = new JPanel(new FlowLayout());
content.add(new JLabel("Test:"));
content.add(comboBox);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().initGUI();
}
});
}
}
如您所见,当选择“其他”项时,JComboBox
变为可编辑:
您可以使用来知道选择了哪个项目,然后可以根据需要将JComboBox
设置为可编辑。试试这个例子:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Demo {
private void initGUI(){
Object[] items = new Object[]{"Dog","Cat","Other"};
DefaultComboBoxModel dcbm = new DefaultComboBoxModel(items);
final JComboBox comboBox = new JComboBox(dcbm);
comboBox.setPreferredSize(new Dimension(200, 20));
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Object selectedItem = comboBox.getSelectedItem();
boolean editable = selectedItem instanceof String && ((String)selectedItem).equals("Other");
comboBox.setEditable(editable);
}
});
/*
* Here you can add a new item to your JComboBox when it becomes editable
*/
comboBox.getEditor().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object newItem = comboBox.getEditor().getItem();
DefaultComboBoxModel dcbm = (DefaultComboBoxModel) comboBox.getModel();
dcbm.addElement(newItem);
dcbm.setSelectedItem(newItem);
}
});
JPanel content = new JPanel(new FlowLayout());
content.add(new JLabel("Test:"));
content.add(comboBox);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().initGUI();
}
});
}
}
如您所见,当选择“其他”项时,JComboBox
变为可编辑:
使其成为
Other
弹出一个JOptionPane
输入对话框。将返回的项目添加到组合框模型的倒数第二位。是否有示例代码?“是否有示例代码?”在该注释中。。您看到了吗?使其成为Other
弹出一个JOptionPane
输入对话框。将返回的项目添加到组合框模型的倒数第二位。是否有示例代码?“是否有示例代码?”在该注释中。。你看到了吗?“这似乎实现了你的目标。”我认为没有。禁用的项目不可使用,因此无法触发操作事件。抱歉,我需要进行视力测试。即使在安德鲁告诉我之后,我也花了一段时间才意识到问题是关于可编辑和不启用的。对不起,“这似乎达到了你想要的。”我不认为是这样。禁用的项目不可使用,因此无法触发操作事件。抱歉,我需要进行视力测试。即使在安德鲁告诉我之后,我也花了一段时间才意识到问题是关于可编辑和不启用的。抱歉。我如何才能在另一个屏幕上获取文本?只是想澄清一下,如果您的JComboBox
可编辑,并不意味着您可以“编辑”所选项目的值。这意味着您可以使用其编辑器将项目添加到JComboBox
。获取新字符串的方法是:comboBox.getEditor().getItem()
。请参阅更新的答案。如何获取另一个答案上的文本?仅澄清一下,如果您的JComboBox
可编辑,并不意味着您可以“编辑”所选项目的值。这意味着您可以使用其编辑器将项目添加到JComboBox
。获取新字符串的方法是:comboBox.getEditor().getItem()
。请参阅更新的答案。