Java 替换并刷新滚动窗格中的旧JXTreeTable

Java 替换并刷新滚动窗格中的旧JXTreeTable,java,xml,swing,tree,jxtreetable,Java,Xml,Swing,Tree,Jxtreetable,我在滚动窗格(gbc_约束)中有一个JxTreeTable,单击该按钮,将打开一个文件选择器窗口,然后用户选择一个xml文件,该文件将被解析为一个新的JxTreeTable。我想把旧的换成新的。但我正努力让这些变化以某种方式显现出来。程序无法明显地调整树,也无法刷新或重新绘制树。我希望你能帮助我 public class pnlXMLTree extends JPanel { public TreeTable treeTable; public JScrollPane sc

我在滚动窗格(gbc_约束)中有一个JxTreeTable,单击该按钮,将打开一个文件选择器窗口,然后用户选择一个xml文件,该文件将被解析为一个新的JxTreeTable。我想把旧的换成新的。但我正努力让这些变化以某种方式显现出来。程序无法明显地调整树,也无法刷新或重新绘制树。我希望你能帮助我

public class pnlXMLTree extends JPanel {

     public TreeTable treeTable;
     public JScrollPane scrollPane;
     public JXTreeTable jxttable;
     public pnlXMLTree() {
            List<Object[]> content = new ArrayList<>();
            final JFileChooser fc = new JFileChooser();
            treeTable = new TreeTable(content);
            ....
            jxttable = treeTable.getTreeTable();
            scrollPane = new JScrollPane(jxttable);
            GridBagConstraints gbc_scrollPane = new GridBagConstraints();
            gbc_scrollPane.anchor = GridBagConstraints.NORTH;
            gbc_scrollPane.fill = GridBagConstraints.HORIZONTAL;
            gbc_scrollPane.gridwidth = 5;
            gbc_scrollPane.gridheight = 13;
            gbc_scrollPane.gridx = 2;
            gbc_scrollPane.gridy = 1;
            add(scrollPane, gbc_scrollPane);
            ...
            ...

            btnOpenXML.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {

                    FileNameExtensionFilter xmlfilter = new FileNameExtensionFilter(
                             "xml files (*.xml)", "xml");
                    fc.setFileFilter(xmlfilter);
                    fc.setDialogTitle("Open schedule file");
                    // set selected filter
                    fc.setFileFilter(xmlfilter);
                    int returnVal = fc.showOpenDialog(null);
                    String filepath;
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        File file = fc.getSelectedFile();
                        //This is where a real application would open the file.
                        System.out.println("Opening: " + file.getName() + ".");
                        filepath = file.getAbsolutePath();
                        jxttable = treeTable.getTreeTable(filepath);
                        //scrollPane = new JScrollPane(treeTable.getTreeTable(filepath));
                        //jxttable.getModel().getRow(0).;

                    } else {
                        System.out.println("Open command cancelled by user.");
                    }


                }
            });

        setVisible(true);

     }

 }
公共类pnlXMLTree扩展了JPanel{
公共树型树型树型树型;
公共JScrollPane滚动窗格;
公共JXTreeTable jxtable;
公共pnlXMLTree(){
列表内容=新建ArrayList();
final JFileChooser fc=新的JFileChooser();
树表=新树表(内容);
....
jxttable=treeTable.getTreeTable();
scrollPane=新的JScrollPane(jxttable);
GridBagConstraints gbc_scrollPane=新的GridBagConstraints();
gbc_scrollPane.anchor=gridbagstraints.NORTH;
gbc_scrollPane.fill=GridBagConstraints.HORIZONTAL;
gbc_scrollPane.gridwidth=5;
gbc_scrollPane.gridheight=13;
gbc_scrollPane.gridx=2;
gbc_scrollPane.gridy=1;
添加(滚动窗格、gbc_滚动窗格);
...
...
addActionListener(新的ActionListener()){
已执行的公共无效操作(操作事件arg0){
FileNameExtensionFilter xmlfilter=新FileNameExtensionFilter(
“xml文件(*.xml)”,“xml”);
fc.setFileFilter(xmlfilter);
fc.setDialogTitle(“打开计划文件”);
//设置所选过滤器
fc.setFileFilter(xmlfilter);
int returnVal=fc.showOpenDialog(null);
字符串文件路径;
if(returnVal==JFileChooser.APPROVE_选项){
File File=fc.getSelectedFile();
//这是一个真正的应用程序打开文件的地方。
System.out.println(“打开:“+file.getName()+”);
filepath=file.getAbsolutePath();
jxttable=treeTable.getTreeTable(文件路径);
//scrollPane=newJScrollPane(treeTable.getTreeTable(filepath));
//jxttable.getModel().getRow(0)。;
}否则{
System.out.println(“用户取消打开命令”);
}
}
});
setVisible(真);
}
}

我总是在
JXTreeTable
上遇到同样的问题,解决方法似乎是像这样重置模型:

myTree.setTreeTableModel(new MyTreeTableModel(rootNode));

在本例中,我的模型构造函数将
TreeNode
类型的根树节点作为参数。

1+但这不是问题,这是Swing组件的工作方式:为了更新组件显示的内容(视图),我们必须更新或替换模型。这同样适用于
JTable
JTree
JComboBox
或任何Swing组件。