Я хочу создать JTree
, используя данные XML. Если я создаю JTree
и не использую функцию, которая выбирает элементы с идентификатором, JTree
будет создан правильно. Но этот Jtree
должен содержать узлы только с id
. И когда я пишу функцию сортировки, JTree
не отображается. Я думаю, что проблема в public void endElement
: когда эта функция пуста, JTree
содержит элементы с id
, но они неверны (table
и figure
должны быть родителями, para
должны быть детьми из table
. Как я могу получить JTree
с правильным изображением детей?
public JTree xmlJTree;
DefaultTreeModel treeModel;
DefaultMutableTreeNode base = new DefaultMutableTreeNode();
static TreeConstruct treeViewer = null;
public class TreeConstruct extends DefaultHandler {
public void expandAll(JTree tree) {
int row = 0;
while (row < tree.getRowCount()) {
tree.expandRow(row);
row++;
}
}
public class SimpleXMLFilter extends XMLFilterImpl {
public void startElement(String uri, String localName, String tagName, Attributes attr)
throws SAXException {
current = new DefaultMutableTreeNode(tagName);
if (tagName != null && attr.getValue("id") != null) {
base.add(current);
base = current;
}
}
public void endElement(String namespaceURI, String localName, String tagName) throws SAXException {
base = (DefaultMutableTreeNode) base.getParent();
}
}
public class SimpleXMLApplication extends DefaultHandler {
public void startDocument() throws SAXException {
super.startDocument();
base = new DefaultMutableTreeNode();
((DefaultTreeModel) xmlJTree.getModel()).setRoot(base);
}
public void endDocument() throws SAXException {
// Refresh JTree
((DefaultTreeModel) xmlJTree.getModel()).reload();
expandAll(xmlJTree);
}
}
public void xmlSetUp(String uri) {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setValidating(true);
SAXParser parser = null;
try {
parser = spf.newSAXParser();
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
XMLReader reader = null;
try {
reader = parser.getXMLReader();
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
SimpleXMLFilter filter = new SimpleXMLFilter();
filter.setParent(reader);
SimpleXMLApplication app = new SimpleXMLApplication();
filter.setContentHandler(app);
filter.setErrorHandler(app);
InputSource inputSource = new InputSource(uri);
try {
filter.parse(inputSource);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void createUI() throws Exception {
treeModel = new DefaultTreeModel(base);
xmlJTree = new JTree(treeModel);
xmlSetUp(currentUrl);
}
}
Это JTree
, когда я не использую функцию endElement