Así que tengo esta clase "Miembro":
package pkgData; import java.io.Serializable; public class Member implements Comparable<Member>, Serializable{ /** * */ private static final long serialVersionUID = 1L; private String name; private String city; public Member(String nameOfMember,String location) { super(); this.name = nameOfMember; this.city=location; } public String getNameOfMember() { return name; } public String getLocationOfMember() { return city; } public void setNameOfMember(String nameOfMember) { this.name = nameOfMember; } @Override public String toString() { return name +", " + city; } @Override public int compareTo(Member o) { int result =this.getNameOfMember().compareTo(o.getNameOfMember()); if(result==0){ result = this.getLocationOfMember().compareTo(o.getLocationOfMember()); } return result; } }Y tengo un JComboBox que es EDITABLE y el modelo de ComboBox es DefaultComboBoxModel.
Entonces, el problema es que si lanzo el elemento seleccionado:
Member nameOfMember = (Member)memberModel.getSelectedItem(); if(nameOfMember== null) throw new Exception("please select a name and a location");Solo verifica si la cadena ingresada está vacía. Si ingreso una cadena como "Nombre, Ubicación", siempre obtengo la excepción de que la Cadena no se puede convertir a Miembro. ¿Qué cadena debo ingresar para que la cadena se pueda convertir a miembro?
Aquí está mi JComboBox:
private JComboBox<Member> getComboBoxMember() { if (comboBoxMember == null) { comboBoxMember = new JComboBox<Member>(); comboBoxMember.setEditable(true); comboBoxMember.setModel(memberModel); } return comboBoxMember; }y aquí las variables globales:
private DefaultComboBoxModel<Member> memberModel; private JComboBox<Member> comboBoxMember;String nameOfMember = (String) memberModel .getSelectedItem();if(nameOfMember==null)throw new Exception("please select a name and a location");else { String[] parts = nameOfMember.split(","); String part1 = parts[0]; // name String part2 = parts[1]; // location Member member=new Member(part1, part2); }Método de división y conversión de cadenas
Lo que puede hacer es, en primer lugar, probar si la cadena que obtiene es nula o si coincide bien con su formato. Luego, puede crear un nuevo objeto con estos elementos.
Aquí hay un pequeño código de ejemplo:
String memberData = (String)memberModel.getSelectedItem(); if(memberData == null || memberData.split(", ")[0].isEmpty() || memberData.split(", ")[1].isEmpty()) { throw new Exception("Data is incorrect, please provide name and location separated with ", "); } Member member = new Member(memberData.split(", ")[0], memberData.split(", ")[1]);Método JComboBox
Con Java 7 sucedió una nueva posibilidad de extensión a JComboBox , que ahora se puede parametrizar de forma genérica (como para ArrayList s) en la forma JComboBox<Type> . Por lo tanto, los objetos que puede obtener con getSelectedItem() ahora se pueden convertir al tipo genérico que proporcionó en el parámetro JComboBox . El único problema es que, cuando se edita un JComboBox , como en su caso, los datos se convierten en un String simple.
Lo que puede hacer en su método de escucha ( ActionListener ) es lo siguiente:
class ItemAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { try { //In case the user has not modified the object Member member = (Member)box.getSelectedItem(); //Just an example here if(member != null) { System.out.println(member.toString()); } } catch(ClassCastException ex) { //In case the object has been modified String data = (String)box.getSelectedItem(); //Apply first method here } } }Pero el problema con este método es que aún terminas usando el primer método.