Java 未更新JTree节点(在Scala中)
我对Scala和Swing JTree组件(Java)之间的互操作性有一个问题 JTree不会正确更新,除非我停止显示JOptionPane以提示用户输入新实体的名称。此行用[***]标记。如您所见,我提供了静态文本“xxx”,对JOptionPane方法的调用进行了注释。在这种情况下,JTree会按照预期正确更新 我认为这可能与Swing线程模型有关,但在可运行类中包装更新文本并不能解决问题。另见 为什么JOptionPane会阻止JTree正确更新节点 我这样做是因为Scala还没有允许动态更新的Swing树实现。看 如有任何提示或建议,将不胜感激 干杯 奈杰尔Java 未更新JTree节点(在Scala中),java,swing,scala,jtree,Java,Swing,Scala,Jtree,我对Scala和Swing JTree组件(Java)之间的互操作性有一个问题 JTree不会正确更新,除非我停止显示JOptionPane以提示用户输入新实体的名称。此行用[***]标记。如您所见,我提供了静态文本“xxx”,对JOptionPane方法的调用进行了注释。在这种情况下,JTree会按照预期正确更新 我认为这可能与Swing线程模型有关,但在可运行类中包装更新文本并不能解决问题。另见 为什么JOptionPane会阻止JTree正确更新节点 我这样做是因为Scala还没有允许动态
问题是每次显示
JOptionPane
时,您都在创建一个新的框架,而不是重用大型机。请记住,top
是一种方法,当您引用“top”以显示JOptionPane
时,您正在创建一个新的大型机
。因此,在最后,您将节点添加到一个大型机中的树中,该树与正在显示的树不同
解决此问题的一种方法是简单地将大型机存储在一个变量中:
var mainFrame: MainFrame = null
def top =
{
mainFrame = new MainFrame {
// Rest of the code
}
mainFrame
}
}
// To show the JOptionPane
JOptionPane.showInputDialog(mainFrame.self, q, APP_NAME, JOptionPane.PLAIN_MESSAGE);
问题是每次显示
JOptionPane
时,您都在创建一个新的框架,而不是重用大型机。请记住,top
是一种方法,当您引用“top”以显示JOptionPane
时,您正在创建一个新的大型机
。因此,在最后,您将节点添加到一个大型机中的树中,该树与正在显示的树不同
解决此问题的一种方法是简单地将大型机存储在一个变量中:
var mainFrame: MainFrame = null
def top =
{
mainFrame = new MainFrame {
// Rest of the code
}
mainFrame
}
}
// To show the JOptionPane
JOptionPane.showInputDialog(mainFrame.self, q, APP_NAME, JOptionPane.PLAIN_MESSAGE);
非常感谢。。。我没有意识到我每次都在调用已定义的方法,而不是使用存储的变量。:/干杯非常感谢。。。我没有意识到我每次都在调用已定义的方法,而不是使用存储的变量。:/干杯