valor validar seleccionado que obtener llenar haya hacer elementos asignar algo agregar java swing jcombobox selectedindex

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(); } }); } }



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:

  1. 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) (o setSelectedIndex(theFoundIndex) )
  2. hashCode equals y hashCode en ComboItem para que dos instancias de ComboItem tengan el mismo nombre sean iguales, y simplemente use setSelectedItem(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 :)