如果JComboBox是可编辑的,如何将输入的字符串转换为对象?

时间:2017-04-29 10:34:50

标签: java casting jframe jcombobox

所以我有这个班级“会员”:

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



}

我有一个可编辑的JComboBox,ComboBox的模型是DefaultComboBoxModel。

所以问题是如果我转换selectedItem:

Member nameOfMember = (Member)memberModel.getSelectedItem();            
    if(nameOfMember== null)
        throw new Exception("please select a name and a location"); 

它仅检查输入的字符串是否为空。如果我输入一个像“Name,Location”这样的字符串,我总是得到一个例外,即String不能转换为Member。我必须输入哪个字符串才能将字符串强制转换为成员?

这是我的JComboBox:

private JComboBox<Member> getComboBoxMember() {
    if (comboBoxMember == null) {
        comboBoxMember = new JComboBox<Member>();
        comboBoxMember.setEditable(true);
        comboBoxMember.setModel(memberModel);
    }
    return comboBoxMember;
}

这里是全局变量:

private DefaultComboBoxModel<Member> memberModel;
private JComboBox<Member> comboBoxMember;

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

字符串拆分&amp;演员方法

如果你得到的字符串为null,或者你的格式匹配得好,你可以做的就是首先测试。然后,您可以使用这些元素创建一个新对象。

这是一个小示例代码:

URL.createObjectURL()

JComboBox方法

Java 7发生了一种新的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]); 扩展可能性,现在可以通过JComboBox形式进行一般参数化(如ArrayList s)。因此,您可以使用JComboBox<Type>获得的对象现在可以转换为您在getSelectedItem()参数中提供的泛型类型。唯一的问题是,在编辑JComboBox时,就像您的情况一样,数据会转换为简单的JComboBox

您可以在侦听器方法中执行的操作(我将使用String)如下:

ActionListener

但是这种方法的问题在于你最终仍然使用第一种方法。