Java 替换并刷新滚动窗格中的旧JXTreeTable
我在滚动窗格(gbc_约束)中有一个JxTreeTable,单击该按钮,将打开一个文件选择器窗口,然后用户选择一个xml文件,该文件将被解析为一个新的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
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组件。