从TreeView Javafx到XML文件Java

问题描述 投票:0回答:1

我正在开发JavaFx应用程序。我有一个XML文件(“ layoutConfigurationFileXML.xml”),该文件按照我在Internet上在线找到的解决方案加载到TreeView结构中。

public class TreeItemCreationContentHandler extends DefaultHandler  {

public TreeItem<String> item = new TreeItem<>();

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
    // finish this node +by going back to the parent
    this.item = this.item.getParent();
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    // start a new node and use it as the current item
    TreeItem<String> item = new TreeItem<>(qName);
    this.item.getChildren().add(item);
    this.item = item;
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
    String s = String.valueOf(ch, start, length).trim();
    if (!s.isEmpty()) {
        // add text content as new child
        this.item.getChildren().add(new TreeItem<>(s));
    }
}

这是我在主控制器中调用的函数:

@FXML
public void loadConfigTextArea(){

    try {

        TreeItem<String> root = readData(new File("layoutConfigurationFileXML.xml"));
        treeXml.setRoot(root);
        treeXml.setEditable(true);
        root.setExpanded(true);
        treeXml.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {

            private final MyContextMenu contextMenu = new MyContextMenu();
            private final StringConverter converter = new DefaultStringConverter();


            @Override
            public TreeCell<String> call(TreeView<String> param) {
                return new CustomTreeCell(contextMenu, converter);
            }

        });

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (ParserConfigurationException e){
        e.printStackTrace();
    } catch (IOException e){
        e.printStackTrace();
    }
}

其中treeXml是.fxml文件中我的treeView的ID。

函数readData(File file)使用SAX库:

 public static TreeItem<String> readData(File file) throws SAXException, ParserConfigurationException, IOException {

    SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    SAXParser parser = parserFactory.newSAXParser();
    XMLReader reader = parser.getXMLReader();
    TreeItemCreationContentHandler contentHandler = new TreeItemCreationContentHandler();


    reader.setContentHandler(contentHandler);
    reader.parse(file.toURI().toString());

    //SPConfigurationManager.layoutConfiguration.getCONFIGURATION()
    TreeItem<String> item = contentHandler.item.getChildren().get(0);
    contentHandler.item.getChildren().clear();
    return item;

}

一切正常。现在,由于用户有机会修改TreeView,所以我想做相反的操作:将TreeView结构保存在“ layoutConfigurationFileXML.xml”文件中。我尝试使用JAXB库,但对我来说还不是很清楚如何进行。有什么建议吗?

我正在开发JavaFx应用程序。按照我在Internet上在线找到的解决方案,我有一个XML文件(“ layoutConfigurationFileXML.xml”)以TreeView结构加载。公共类...

java xml javafx treeview sax
1个回答
0
投票

JAXB要求您对相同类型的元素使用相同的元素名称,即您的输出看起来像这样

© www.soinside.com 2019 - 2024. All rights reserved.