I have a Jtree that displays all the keys in my properties file - however when I click on a node I want it to obtain the value that goes with the currently selected key and display it in my panel on the right of my Jtree. I have my code below, if anyone knows how I'd display that it would a big help!
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Rectangle;
import java.io.FileInputStream;
import java.util.Properties;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeSelectionModel;
import net.miginfocom.swing.MigLayout;
public class HelpSystem implements TreeSelectionListener {
private static final long serialVersionUID = 1L;
private JFrame frame;
private JTextField textFieldSearch;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HelpSystem window = new HelpSystem();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public HelpSystem() {
frame = new JFrame();
frame.setBounds(100, 100, 842, 516);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new MigLayout("", "[grow]", "[][grow]"));
JSplitPane splitPane = new JSplitPane();
frame.getContentPane().add(splitPane, "cell 0 1,grow");
JPanel panel = new JPanel();
splitPane.setRightComponent(panel);
panel.setLayout(new MigLayout("", "[]", "[]"));
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
splitPane.setLeftComponent(tabbedPane);
JPanel panelSearch = new JPanel();
panelSearch.setPreferredSize(new Dimension(7, 10));
tabbedPane.addTab("Search", null, panelSearch, null);
panelSearch.setLayout(new MigLayout("", "[][][]", "[][][][][][][][][]"));
JLabel lblSearchForGit = new JLabel("Search for Git command:");
panelSearch.add(lblSearchForGit, "cell 0 1,alignx center");
textFieldSearch = new JTextField();
panelSearch.add(textFieldSearch, "cell 0 3,growx");
textFieldSearch.setColumns(10);
JLabel lblSearchForGit_1 = new JLabel("search for git command to display info in the right");
panelSearch.add(lblSearchForGit_1, "cell 0 8");
JPanel panelLookup = new JPanel();
panelLookup.setToolTipText("Lookup a command");
tabbedPane.addTab("Lookup", null, panelLookup, null);
panelLookup.setLayout(new MigLayout("", "[grow][grow]", "[grow][grow][][][][][][][][][][]"));
JScrollPane scrollPane = new JScrollPane();
panelLookup.add(scrollPane, "flowx,cell 0 0 2 11,grow");
///Area related to displaying JTree inside jpanel /////
JPanel panel_1 = new JPanel();
panel_1.setBackground(Color.WHITE);
panel_1.setSize(new Dimension(22, 0));
scrollPane.setViewportView(panel_1);
Properties properties = new Properties();
try {
//properties file - get the data in the file
String filename = "GitCommands.properties";
// Properties p =System.getProperties();
Properties p = properties;
FileInputStream fileInputStream = new FileInputStream(filename);
//load properties file
properties.load(fileInputStream);
panel_1.setLayout(new MigLayout("", "[64px][][][][][][][]", "[322px,grow,fill][][]"));
//sets up a scroll pane to view all of the tree
JScrollPane scrollpane = new JScrollPane();
//frame.getContentPane().add(scrollpane, "Center");
panel_1.add(scrollpane, "cell 0 5,alignx left,aligny top");
//what will happen when the user closes the program
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//sets new jtree
final JTree tree = new JTree(p);
//Where the tree is initialized:
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
//Listen for when the selection changes.
tree.addTreeSelectionListener(this);
panel_1.add(tree, "cell 7 0 1 3");
tree.setAlignmentX(Component.RIGHT_ALIGNMENT);
tree.setBounds(new Rectangle(0, 0, 40, 0));
tree.setToolTipText("Click a command");
//sort in to order
//allows the root of the tree to be shown
tree.setRootVisible(true);
//re size the width
tree.setSize(20, 10);
//it will be visible
frame.setVisible(true);
} catch (Exception e) {
}
}
@Override
public void valueChanged(TreeSelectionEvent e) {
//
}
}
Then I have my method to go with the listener for the event of the node being clicked
private void createSelectionListener(Object node) {
//if nothing is selected
if (node == null) return;
// retrieve the node that was selected
Object nodeInfo = ((DefaultMutableTreeNode) node).getUserObject();
// What happens when node is clicked
}
}
I am just unsure of what to put underneath //what happens when node is clicked in order to get it display?
I'm assuming your question is a continuation of the one you've asked before. What you want is to utilize a Tree Selection Listener.
import java.awt.BorderLayout;
import java.util.Properties;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
public class GetAllProperties extends JFrame {
private static final String NOTHING_SELECTED = "<nothing selected>";
private final JScrollPane treeScroll;
private final JTree tree;
private final DefaultTreeModel treeModel;
private final DefaultMutableTreeNode root;
private final JLabel descriptionLabel;
private Properties properties;
public GetAllProperties() {
setLayout(new BorderLayout());
root = new DefaultMutableTreeNode("GIT commands");
treeModel = new DefaultTreeModel(root);
tree = new JTree(treeModel);
treeScroll = new JScrollPane(tree);
add(treeScroll, BorderLayout.WEST);
populateTree();
descriptionLabel = new JLabel(NOTHING_SELECTED);
add(descriptionLabel, BorderLayout.CENTER);
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent 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) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new GetAllProperties().setVisible(true);
}
});
}
private void populateTree() {
// fake properties in order to avoid IO
properties = new Properties();
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));
}
}
You really should consider reading and understanding the How to use Trees tutorial, like it has already been suggested to you.
I wanted to answer your prior question with the above code, but was to late, so here you go.