gpt4 book ai didi

java - Java 中的事件处理(JTree + JButton)

转载 作者:行者123 更新时间:2023-12-02 04:04:35 24 4
gpt4 key购买 nike

private void createEvents() 
{
menuFileExit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
System.exit(0);
}
});
////// Events on tree selection
jtStoryViewer.addTreeSelectionListener(new TreeSelectionListener()
{
public void valueChanged(TreeSelectionEvent arg0)
{
DefaultMutableTreeNode selection = (DefaultMutableTreeNode) jtStoryViewer.getLastSelectedPathComponent();
Object nodeObject = selection.getUserObject();



////// Checks if selected node is a String (only story title is a string)
if(selection.getUserObject().getClass().getName() == "java.lang.String" )
{
tfTitle.setText(nodeObject.toString());


////// Action listener for Change Button
btnChange.addActionListener(new ActionListener()
{
////// Title text swap
public void actionPerformed(ActionEvent arg0)
{
selection.setUserObject(tfTitle.getText());
((DefaultTreeModel)jtStoryViewer.getModel()).nodeChanged(selection);
}
});
}
///// checks if the object is a chapter object
if(selection.getUserObject().getClass().getName() == "ISW.common.Chapter")
{
Chapter chapter = (Chapter) selection.getUserObject();
tfTitle.setText(chapter.toString());



////// Action listener for Change Button
btnChange.addActionListener(new ActionListener()
{
////// Title text swap
public void actionPerformed(ActionEvent arg0)
{
chapter.setTitle(tfTitle.getText());
((DefaultTreeModel)jtStoryViewer.getModel()).nodeChanged(selection);

}
});
}


}
});
}

visualization of the problem

我正在使用JTree来显示和修改一些对象。我添加了一个 TreeSelectionListener 来获取选择时的对象数据。现在我希望能够更改对象的标题,它在树上的第一个选择上工作正常,我更改文本框中的值并且“更改”按钮工作得很好,但是当我转到下一个时对象时,更改按钮还会修改所有先前选择的对象的值。

我猜这是由于我对 ActionListeners 的不当使用造成的,但我无法确定,此时我陷入了困境。

如果有任何提示,我们将不胜感激。

最佳答案

不要继续向 TreeSelectionListener#valueChanged 方法中的 btnChange JButton 添加 ActionListener

这将导致按钮调用您之前的每个 ActionListener

相反,给btnChange一个单独的ActionListener,当点击时,可以对当前选定的节点进行操作(通过检查JTree它本身)。您可以让 TreeSelectionListener#valueChanged 方法根据选择的有效性启用或禁用 btnChange

此外,if(selection.getUserObject().getClass().getName() == "ISW.common.Chapter") 并不是 String 比较的方式是用 Java 完成的,您应该使用类似于 if("ISW.common.Chapter".equals(selection.getUserObject().getClass().getName()))

的内容

关于java - Java 中的事件处理(JTree + JButton),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com