无法获取对象字符串值;需要转换为String来进行比较

时间:2016-03-03 23:39:15

标签: java swing object jtable jtree

我想在尝试从Tree添加节点时检查Tree中的值是否存在。在我获得Object而不是String的情况下,该值不匹配。

以下是调用existsInTable()

的操作代码
     try {
        DefaultMutableTreeNode selectedElement = (DefaultMutableTreeNode) TestTree.getSelectionPath().getLastPathComponent();
        Object[] row = {selectedElement};
        DefaultTableModel model = (DefaultTableModel) myTests_table.getModel();

        if (selectedElement.isLeaf() == true && existsInTable(myTests_table, row) == false) {
            model.addRow(row);
        } else {
            JOptionPane.showMessageDialog(null, "Please Choose Test name!", "Error", JOptionPane.WARNING_MESSAGE);
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Error");
    }

以下是检查方法

    public boolean existsInTable(JTable table, Object[] testname) {
    int row = table.getRowCount();
       for (int i = 0; i < row; i++) {
        String str = "";
        str = table.getValueAt(i, 0).toString();
        if (testname.equals(str)) {
            System.out.println(str);
            JOptionPane.showMessageDialog(null, "data alreadyexist.", "message", JOptionPane.PLAIN_MESSAGE);
            return true;
        }
    }
    return false;

}
the result is this : [Ljava.lang.Object;@11da1f8     
but it should be   : Test

1 个答案:

答案 0 :(得分:2)

如果您向Object添加TableModel的实例,则getValueAt()将返回该实例。给定ObjecttoString()返回的结果完全是预期的 - &#34;一个字符串,由对象为实例的类的名称组成,at符号字符{{1和对象的哈希码的无符号十六进制表示。&#34;

仔细观察,您似乎添加了array of Object instances。给定默认表模型,

@

以下几行

DefaultTableModel model = new DefaultTableModel(1, 1);

产生这个输出:

model.setValueAt(new Object[1], 0, 0);
System.out.println(model.getValueAt(0, 0));

要查看字符串,例如&#34;测试&#34;,请在[Ljava.lang.Object;@330bedb4 中添加String的相应实例:

TableModel

产生所需的输出:

model.setValueAt("Test", 0, 0);
System.out.println(model.getValueAt(0, 0));

为了获得最佳效果,请按照How to Use Tables: Concepts: Editors and Renderers中的建议验证您的Test 实施是否兼容。