validar - llenar jcombobox java
Cómo establecer el índice seleccionado JComboBox por valor (9)
¿Por qué no tomar una colección, probablemente un Mapa como un HashMap, y usarlo como el núcleo de su propia clase de modelo de cuadro combinado que implementa la interfaz ComboBoxModel? A continuación, puede acceder a los elementos de su cuadro combinado fácilmente a través de sus cadenas clave en lugar de enter.
Por ejemplo...
import java.util.HashMap;
import java.util.Map;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;
public class MyComboModel<K, V> implements ComboBoxModel {
private Map<K, V> nucleus = new HashMap<K, V>();
// ... 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
}
Quiero establecer el índice seleccionado en un JComboBox por el valor, no por el índice. ¿Como hacer eso? Ejemplo
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");
Ok, modifiqué mi pregunta un poco. Olvidé que tengo un artículo personalizado dentro de mi JComboBox que lo hace un poco más difícil. No puedo hacer SetSelectedItem ya que tengo un ComboItem dentro de cada elemento. Así que, aún así, ¿cómo hago esto?
Deberías usar el modelo
comboBox.getModel().setSelectedItem(object);
La forma correcta de establecer un elemento seleccionado cuando el cuadro combinado está poblado por el constructor de alguna clase (como @milosz publicado):
combobox.getModel().setSelectedItem(new ClassName(parameter1, parameter2));
En tu caso, el código sería:
test.getModel().setSelectedItem(new ComboItem(3, "banana"));
Simplemente llame a comboBox.updateUI () después de hacer comboBox.setSelectedItem o comboBox.setSelectedIndex o comboModel.setSelectedItem
por ejemplo
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");
Hay algunas advertencias o un comportamiento potencialmente inesperado como se explica en el javadoc. Asegúrate de leer eso.
setSelectedItem("banana")
. Podrías haberlo encontrado solo leyendo el javadoc .
Editar: como cambiaste la pregunta, cambiaré mi respuesta.
Si desea seleccionar el artículo que tiene la etiqueta "banana", entonces tiene dos soluciones:
- Itere a través de los ítems para encontrar uno (o el índice de uno) que tenga la etiqueta dada, y luego llame a
setSelectedItem(theFoundItem)
(osetSelectedIndex(theFoundIndex)
) -
hashCode
equals
yhashCode
enComboItem
para que dos instancias deComboItem
tengan el mismo nombre sean iguales, y simplemente usesetSelectedItem(new ComboItem(anyNumber, "banana"))
;
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;
}
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;
}
}
}
Espero que esto ayude :)