如何按值设置选定的索引JComboBox

我想通过值而不是索引在JComboBox中设置所选索引。 怎么做? 例

public class ComboItem { private String value; private String label; public ComboItem(String value, String label) { this.value = value; this.label = label; } public String getValue() { return this.value; } public String getLabel() { return this.label; } @Override public String toString() { return label; } } JComboBox test = new JComboBox(); test.addItem(new ComboItem(0, "orange")); test.addItem(new ComboItem(1, "pear")); test.addItem(new ComboItem(2, "apple")); test.addItem(new ComboItem(3, "banana")); test.setSelectedItem("banana"); 

好的,我稍微修改了一下我的问题。 我忘了我的JComboBox里面有一个自定义项目,这让它变得有点困难。 我不能做setSelectedItem,因为我在每个项目中都有一个ComboItem。 那么,我怎么做到这一点?

setSelectedItem("banana") 。 你可以通过阅读javadoc自己找到它。

编辑:既然你改变了问题,我会改变我的答案。

如果要选择具有“香蕉”标签的项目,则有两种解决方案:

  1. 遍历项目以找到具有给定标签的一个(或一个索引),然后调用setSelectedItem(theFoundItem) (或setSelectedIndex(theFoundIndex)
  2. 覆盖ComboItem equalshashCode ,以便两个具有相同名称的ComboItem实例相等,并简单地使用setSelectedItem(new ComboItem(anyNumber, "banana")) ;
 public static void setSelectedValue(JComboBox comboBox, int value) { ComboItem item; for (int i = 0; i < comboBox.getItemCount(); i++) { item = (ComboItem)comboBox.getItemAt(i); if (item.getValue().equalsIgnoreCase(value)) { comboBox.setSelectedIndex(i); break; } } } 

希望这有帮助:)

你应该使用模型

 comboBox.getModel().setSelectedItem(object); 

为什么不采用一个集合,可能是一个地图,如HashMap,并将其用作实现ComboBoxModel接口的自己的combobox模型类的核心? 然后,您可以通过键盘而不是整数来轻松访问combobox的项目。

例如…

 import java.util.HashMap; import java.util.Map; import javax.swing.ComboBoxModel; import javax.swing.event.ListDataListener; public class MyComboModel implements ComboBoxModel { private Map nucleus = new HashMap(); // ... any constructors that you want would go here public void put(K key, V value) { nucleus.put(key, value); } public V get(K key) { return nucleus.get(key); } @Override public void addListDataListener(ListDataListener arg0) { // TODO Auto-generated method stub } // ... plus all the other methods required by the interface } 

例如

在此处输入图像描述

 import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; public class ComboboxExample { private JFrame frame = new JFrame("Test"); private JComboBox comboBox = new JComboBox(); public ComboboxExample() { createGui(); } private void createGui() { comboBox.addItem("One"); comboBox.addItem("Two"); comboBox.addItem("Three"); JButton button = new JButton("Show Selected"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(frame, "Selected item: " + comboBox.getSelectedItem()); javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { comboBox.requestFocus(); comboBox.requestFocusInWindow(); } }); } }); JButton button1 = new JButton("Append Items"); button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { appendCbItem(); } }); JButton button2 = new JButton("Reduce Items"); button2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { reduceCbItem(); } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new GridLayout(4, 1)); frame.add(comboBox); frame.add(button); frame.add(button1); frame.add(button2); frame.setLocation(200, 200); frame.pack(); frame.setVisible(true); selectFirstItem(); } public void appendCbItem() { javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { comboBox.addItem("Four"); comboBox.addItem("Five"); comboBox.addItem("Six"); comboBox.setSelectedItem("Six"); requestCbFocus(); } }); } public void reduceCbItem() { javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { comboBox.removeItem("Four"); comboBox.removeItem("Five"); comboBox.removeItem("Six"); selectFirstItem(); } }); } public void selectFirstItem() { javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { comboBox.setSelectedIndex(0); requestCbFocus(); } }); } public void requestCbFocus() { javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { comboBox.requestFocus(); comboBox.requestFocusInWindow(); } }); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ComboboxExample comboboxExample = new ComboboxExample(); } }); } } 

http://docs.oracle.com/javase/6/docs/api/javax/swing/JComboBox.html#setSelectedItem(java.lang.Object

 test.setSelectedItem("banana"); 

有一些警告或潜在的意外行为,如javadoc中所述。 一定要阅读。

combobox由某个类的构造函数填充时设置项目的正确方法(如@milosz发布的):

 combobox.getModel().setSelectedItem(new ClassName(parameter1, parameter2)); 

在您的情况下,代码将是:

 test.getModel().setSelectedItem(new ComboItem(3, "banana")); 

在执行comboBox.setSelectedItem或comboBox.setSelectedIndex或comboModel.setSelectedItem之后,只需调用comboBox.updateUI()

 public boolean preencherjTextCombox (){ int x = Integer.parseInt(TableModelo.getModel().getValueAt(TableModelo.getSelectedRow(),0).toString()); modeloobj = modelosDAO.pesquisar(x); Combmarcass.getModel().setSelectedItem(modeloobj.getMarca()); txtCodigo.setText(String.valueOf(modeloobj.getCodigo())); txtDescricao.setText(String.valueOf(modeloobj.getDescricao())); txtPotencia.setText(String.valueOf(modeloobj.getPotencia())); return true; }