当前位置: 首页 > 知识库问答 >
问题:

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

高锦
2023-03-14

所以我有这个类“成员”:

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”的字符串,我总是得到一个异常,即字符串不能转换为成员。我必须输入哪个字符串才能将该字符串转换为成员?

这是我的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个答案

闻人河
2023-03-14

字符串拆分

你能做的是首先测试你得到的字符串是否为空,或者它是否与你的格式匹配。然后,您可以用这些元素创建一个新的对象

下面是一个小示例代码:

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方法

随着Java 7的出现,扩展到JComboBox的新可能性,现在可以以JComboBox的形式进行通用参数化(如ArrayLists)。

您可以在监听器方法(我将使用< code>ActionListener)中执行以下操作:

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
        }

    }
}

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

拓拔飞飙
2023-03-14
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);
}
 类似资料:
  • 我使用的是从数据库填充的JTree。 通过将根节点及其子节点设置为自定义对象,可以创建树: 在这之后,树被完美地创造出来。使用类别对象填充,每个对象都有自己的ID号和名称,以便在toString()方法中使用。 当它被设置为可编辑时,问题就来了。一旦节点被重命名,类别节点也被转换成一个字符串对象,所以我不能更新新的类别名称值到数据库。 我试图用捕捉重命名事件,但userObject已更改为Stri

  • 问题内容: 我想将流结果输出转换为字符串,因为我想在Junit中使用它,我想我需要使用字符串编写器,但是我不确定如何确切地使用它。 谢谢费多 问题答案: 查看并学习使用StreamResult类的javadocs(http://java.sun.com/javase/6/docs/api/)。StreamResult的构造函数之一采用Writer对象作为参数。您将看到Writer的子类之一是Str

  • 问题内容: 我编写了一个简单的程序,用于在Java中向串行端口发送和接收数据。我通过回送测试(Rx到Tx)连接串行端口设备。它工作正常。但我无法发送和接收十六进制数据到串行端口和接收串行端口。在我的设备中使用了FT232BL芯片,因此是否需要任何dll或其他库来将十六进制数据发送和接收到串行端口设备。我的代码如下。 问题答案: 十六进制: 十六进制为:

  • 这是代码,我正在尝试将分钟数(字符串类型)转换为整数类型,但我有NumberFormatException错误,有人能帮我吗,我如何处理这种情况。谢谢

  • 问题内容: 我正在阅读有关python的新f字符串的 博客 ,它们看起来很整洁。但是,我希望能够从字符串或文件中加载f字符串。 我似乎找不到任何执行此操作的字符串方法或其他函数。 从上面我的链接中的示例: 但是,如果我有琴弦怎么办?我希望能够像这样: 事实证明,我已经可以执行类似的操作并获得性能提高。即: 问题答案: f字符串是代码。不仅以安全的方式(当然,字符串文字就是代码),而且以危险的任意代

  • 我有一个字符串返回给我,其中包含转义字符。 这是一个示例字符串 " test\40gmail.com " 如您所见,它包含转义字符。我需要将其转换为其实际值,即 " test@gmail.com " 我该怎么做?