Hello, I am using a JTree to show some data. The data is displayed in the right way, but when I modify the text in a leaf, and make it longer, the text is cut off and the text ends with "..."
Is there some way to make the component where text is displayed longer in order to display the text correctly? I have tried to use a custom TreeCellRenderer and create a new JLabel with the new value of the text. But I didn't get a satisfactory result. Any ideas?
The code below shows and example of a JTree. The button modifies the text of the selected node.
package test.jtree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
public class AppTestJTree extends javax.swing.JFrame {
private javax.swing.JButton btnChangeText;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTree tree;
public AppTestJTree() {
super("Test JTree");
initComponents();
initTree();
}
/**
* main program
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new AppTestJTree().setVisible(true);
}
});
}
@SuppressWarnings("unchecked")
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
tree = new javax.swing.JTree();
btnChangeText = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setMinimumSize(new java.awt.Dimension(266, 300));
jPanel1.setPreferredSize(new java.awt.Dimension(266, 300));
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.LINE_AXIS));
jScrollPane1.setMinimumSize(new java.awt.Dimension(150, 150));
tree.setModel(null);
jScrollPane1.setViewportView(tree);
jPanel1.add(jScrollPane1);
btnChangeText.setText("Change text");
btnChangeText.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnChangeTextActionPerformed(evt);
}
});
jPanel1.add(btnChangeText);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}
private void btnChangeTextActionPerformed(java.awt.event.ActionEvent evt) {
TreePath[] paths = tree.getSelectionPaths();
if (paths != null) {
for (int i = 0; i < paths.length; i++) {
Object node = paths.getLastPathComponent();
if(node instanceof DefaultMutableTreeNode){
DefaultMutableTreeNode leaf = (DefaultMutableTreeNode) node;
leaf.setUserObject((String)leaf.getUserObject() + (String)leaf.getUserObject());
}
}
tree.repaint();
}
}
private void initTree() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
for(int i = 0; i < 3; i++){
DefaultMutableTreeNode branch = new DefaultMutableTreeNode("branch " + i);
DefaultMutableTreeNode leaf = new DefaultMutableTreeNode("child " + i);
branch.add(leaf);
root.add(branch);
}
DefaultTreeModel model = new DefaultTreeModel(root);
tree.setModel(model);
tree.expandRow(3);
}
}