Java 未更新JTree节点(在Scala中)

Java 未更新JTree节点(在Scala中),java,swing,scala,jtree,Java,Swing,Scala,Jtree,我对Scala和Swing JTree组件(Java)之间的互操作性有一个问题 JTree不会正确更新,除非我停止显示JOptionPane以提示用户输入新实体的名称。此行用[***]标记。如您所见,我提供了静态文本“xxx”,对JOptionPane方法的调用进行了注释。在这种情况下,JTree会按照预期正确更新 我认为这可能与Swing线程模型有关,但在可运行类中包装更新文本并不能解决问题。另见 为什么JOptionPane会阻止JTree正确更新节点 我这样做是因为Scala还没有允许动态

我对Scala和Swing JTree组件(Java)之间的互操作性有一个问题

JTree不会正确更新,除非我停止显示JOptionPane以提示用户输入新实体的名称。此行用[***]标记。如您所见,我提供了静态文本“xxx”,对JOptionPane方法的调用进行了注释。在这种情况下,JTree会按照预期正确更新

我认为这可能与Swing线程模型有关,但在可运行类中包装更新文本并不能解决问题。另见

为什么JOptionPane会阻止JTree正确更新节点

我这样做是因为Scala还没有允许动态更新的Swing树实现。看

如有任何提示或建议,将不胜感激

干杯

奈杰尔


问题是每次显示
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);

非常感谢。。。我没有意识到我每次都在调用已定义的方法,而不是使用存储的变量。:/干杯非常感谢。。。我没有意识到我每次都在调用已定义的方法,而不是使用存储的变量。:/干杯