我想在尝试从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
答案 0 :(得分:2)
如果您向Object
添加TableModel
的实例,则getValueAt()
将返回该实例。给定Object
,toString()
返回的结果完全是预期的 - &#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
实施是否兼容。