package edu.stanford.nlp.trees.tregex.gui; import java.awt.Color; import java.io.File; import java.util.ArrayList; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.tree.DefaultMutableTreeNode; import edu.stanford.nlp.trees.Treebank; /** * Represents a node in a JTree that holds a file and displays * the short name of the file in the JTree. * * @author Anna Rafferty */ @SuppressWarnings("serial") public class FileTreeNode extends DefaultMutableTreeNode { private File file; private JCheckBox check = null; private JLabel label =null; private Treebank t; private final ArrayList<FileTreeNodeListener> listeners = new ArrayList<>(); //this is only for a root node public FileTreeNode() { super(); label = new JLabel("root"); this.setAllowsChildren(true); } public FileTreeNode(File file, FileTreeNode parent) { super(file); this.setParent(parent); this.file = file; boolean isLeaf = file.isFile(); if(isLeaf) { check = new JCheckBox(this.toString(),isLeaf); check.setOpaque(true); check.setBackground(Color.WHITE); } else label = new JLabel(this.toString()); this.setAllowsChildren(!isLeaf); } @Override public String toString() { if(file == null) return "root"; else return file.getName(); } public JComponent getDisplay() { if(check != null) return check; else return label; } public boolean isActive() { if(check == null) return false; else return check.isSelected(); } public void setActive(boolean active) { if(check != null && (check.isSelected() != active)) { check.setSelected(active); sendToListeners(); } } public void addListener(FileTreeNodeListener l) { listeners.add(l); } private void sendToListeners() { for(FileTreeNodeListener l : listeners) l.treeNodeChanged(this); } public Treebank getTreebank() { return t; } public void setTreebank(Treebank t) { this.t = t; } public String getFilename() { if(file == null) return "root"; else return file.getPath(); } public File getFile() { return file; } public static interface FileTreeNodeListener { public void treeNodeChanged(FileTreeNode n); } }