下面列出了javax.swing.tree.TreeModel#addTreeModelListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/** Creates a new instance of DefaultOutlineModel. <strong><b>Note</b>
* Do not fire table structure changes from the wrapped TableModel (value
* changes are okay). Changes that affect the number of rows must come
* from the TreeModel.
* @param treeModel The tree model
* @param tableModel The table model
* @param largeModel <code>true</code> if it's a large model tree, <code>false</code> otherwise.
* @param nodesColumnLabel Label of the node's column
*/
protected DefaultOutlineModel(TreeModel treeModel, TableModel tableModel, boolean largeModel, String nodesColumnLabel) {
this.treeModel = treeModel;
this.tableModel = tableModel;
if (nodesColumnLabel != null) {
this.nodesColumnLabel = nodesColumnLabel;
}
layout = largeModel ? (AbstractLayoutCache) new FixedHeightLayoutCache()
: (AbstractLayoutCache) new VariableHeightLayoutCache();
broadcaster = new EventBroadcaster (this);
layout.setRootVisible(true);
layout.setModel(this);
treePathSupport = new TreePathSupport(this, layout);
treePathSupport.addTreeExpansionListener(broadcaster);
treePathSupport.addTreeWillExpandListener(broadcaster);
treeModel.addTreeModelListener(broadcaster);
tableModel.addTableModelListener(broadcaster);
if (tableModel instanceof ProxyTableModel) {
((ProxyTableModel) tableModel).setOutlineModel(this);
}
}
private void createTreeView() {
synchronized (lock) {
releaseTreeView();
treeView = new DebugTreeView();
treeView.setRootVisible(false);
treeView.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
treeView.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
treeView.getAccessibleContext().setAccessibleName(NbBundle.getMessage(DebuggingViewComponent.class, "DebuggingViewComponent.treeView.AccessibleContext.accessibleName")); // NOI18N
treeView.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(DebuggingViewComponent.class, "DebuggingViewComponent.treeView.AccessibleContext.accessibleDescription")); // NOI18N
treeView.getTree().addMouseWheelListener(this);
treeView.addTreeExpansionListener(this);
TreeModel model = treeView.getTree().getModel();
model.addTreeModelListener(this);
treeView.getViewport().addChangeListener(this);
treeView.getTree().setScrollsOnExpand(false);
mainPanel.add(treeView, BorderLayout.CENTER);
}
}
private MainPanel() {
super(new BorderLayout());
JTree tree = new JTree() {
@Override public void updateUI() {
setCellRenderer(null);
setCellEditor(null);
super.updateUI();
// ???#1: JDK 1.6.0 bug??? Nimbus LnF
setCellRenderer(new CheckBoxNodeRenderer());
setCellEditor(new CheckBoxNodeEditor());
}
};
TreeModel model = tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
// Java 9: Collections.list(root.breadthFirstEnumeration()).stream()
Collections.list((Enumeration<?>) root.breadthFirstEnumeration()).stream()
.filter(DefaultMutableTreeNode.class::isInstance)
.map(DefaultMutableTreeNode.class::cast)
.forEach(n -> n.setUserObject(new CheckBoxNode(Objects.toString(n.getUserObject(), ""), Status.DESELECTED)));
model.addTreeModelListener(new CheckBoxStatusUpdateListener());
tree.setEditable(true);
tree.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
tree.expandRow(0);
// tree.setToggleClickCount(1);
setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
add(new JScrollPane(tree));
setPreferredSize(new Dimension(320, 240));
}
/**
* Sets the specified tree model. The current cheking is cleared.
*/
public void setTreeModel(TreeModel newModel) {
TreeModel oldModel = this.model;
if (oldModel != null) {
oldModel.removeTreeModelListener(this.propagateCheckingListener);
}
this.model = newModel;
if (newModel != null) {
newModel.addTreeModelListener(this.propagateCheckingListener);
}
clearChecking();
}
synchronized void apply(JTree tree) {
expanded = new boolean[expandedPaths.length];
expandAll(tree);
TreeModel model = tree.getModel();
if(model != null)
model.addTreeModelListener(new JTreeExpander(this, tree));
}
@Override
public void addRawDataTreeListener(TreeModelListener listener) {
TreeModel model = getMainPanel().getRawDataTree().getModel();
model.addTreeModelListener(listener);
}
@Override
public void addPeakListTreeListener(TreeModelListener listener) {
TreeModel model = getMainPanel().getPeakListTree().getModel();
model.addTreeModelListener(listener);
}
public FacadeInvalidator(TreeModel treeModel, List<GanttProjectBase.RowHeightAligner> rowHeightAligners) {
isValid = false;
treeModel.addTreeModelListener(this);
myRowAligners = Preconditions.checkNotNull(rowHeightAligners);
}
private MainPanel() {
super(new BorderLayout());
JTree tree = new JTree() {
@Override public void updateUI() {
setCellRenderer(null);
setCellEditor(null);
super.updateUI();
// ???#1: JDK 1.6.0 bug??? Nimbus LnF
setCellRenderer(new CheckBoxNodeRenderer());
setCellEditor(new CheckBoxNodeEditor());
}
};
TreeModel model = tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
// Java 9: Collections.list(root.breadthFirstEnumeration()).stream()
Collections.list((Enumeration<?>) root.breadthFirstEnumeration()).stream()
.filter(DefaultMutableTreeNode.class::isInstance)
.map(DefaultMutableTreeNode.class::cast)
.forEach(n -> n.setUserObject(new CheckBoxNode(Objects.toString(n.getUserObject(), ""), Status.DESELECTED)));
model.addTreeModelListener(new CheckBoxStatusUpdateListener());
tree.setEditable(true);
tree.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
tree.expandRow(0);
// tree.setToggleClickCount(1);
JButton save = new JButton("save");
save.addActionListener(e -> {
try {
File file = File.createTempFile("output", ".xml");
String[] constructorPropertyNames = {"label", "status"};
// try (XMLEncoder xe = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(file)))) {
try (XMLEncoder xe = new XMLEncoder(new BufferedOutputStream(Files.newOutputStream(file.toPath())))) {
xe.setPersistenceDelegate(CheckBoxNode.class, new DefaultPersistenceDelegate(constructorPropertyNames));
xe.writeObject(tree.getModel());
}
try (Reader r = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8)) {
textArea.read(r, "temp");
}
} catch (IOException ex) {
ex.printStackTrace();
textArea.setText(ex.getMessage());
}
});
JButton load = new JButton("load");
load.addActionListener(e -> {
String text = textArea.getText();
if (text.isEmpty()) {
return;
}
// try (XMLDecoder xd = new XMLDecoder(new BufferedInputStream(new FileInputStream(new File("output.xml"))))) {
byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
try (XMLDecoder xd = new XMLDecoder(new BufferedInputStream(new ByteArrayInputStream(bytes)))) {
DefaultTreeModel m = (DefaultTreeModel) xd.readObject();
m.addTreeModelListener(new CheckBoxStatusUpdateListener());
tree.setModel(m);
}
});
Box box = Box.createHorizontalBox();
box.add(Box.createHorizontalGlue());
box.add(save);
box.add(Box.createHorizontalStrut(4));
box.add(load);
JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
sp.setResizeWeight(.5);
sp.setTopComponent(new JScrollPane(tree));
sp.setBottomComponent(new JScrollPane(textArea));
add(sp);
add(box, BorderLayout.SOUTH);
setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setPreferredSize(new Dimension(320, 240));
}