Java Swing How to - Retrieve values from properties file when key node is clicked in JTree








Question

We would like to know how to retrieve values from properties file when key node is clicked in JTree.

Answer

import java.awt.BorderLayout;
import java.util.Properties;
import java.util.Set;
/*from   w  w w .  j a  v  a 2  s.  c o m*/
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

public class Main extends JFrame {
  static String NOTHING_SELECTED = "<nothing selected>";
  JScrollPane treeScroll;
  JTree tree;
  DefaultTreeModel treeModel;
  DefaultMutableTreeNode root = new DefaultMutableTreeNode("GIT commands");
  JLabel descriptionLabel;

  Properties properties = new Properties();
  public Main() {
    setLayout(new BorderLayout());
    treeModel = new DefaultTreeModel(root);
    tree = new JTree(treeModel);
    treeScroll = new JScrollPane(tree);
    add(treeScroll, BorderLayout.WEST);
    
    properties.setProperty("foo1", "bar1");
    properties.setProperty("foo2", "bar2");
    properties.setProperty("foo3", "bar3");
    properties.setProperty("foo4", "bar4");

    Set<Object> keySet = properties.keySet();
    for (Object key : keySet) {
      root.add(new DefaultMutableTreeNode(key));
    }

    tree.expandPath(new TreePath(root));
    descriptionLabel = new JLabel(NOTHING_SELECTED);
    add(descriptionLabel, BorderLayout.CENTER);

    tree.addTreeSelectionListener(e->{
        DefaultMutableTreeNode selection = (DefaultMutableTreeNode) tree
            .getLastSelectedPathComponent();
        if (selection != null) {
          String key = (String) selection.getUserObject();
          String command = properties.getProperty(key);
          descriptionLabel.setText(command);
        } else {
          descriptionLabel.setText(NOTHING_SELECTED);
        }
    });
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
  }
  public static void main(String[] args) {
    new Main().setVisible(true);
  }
}