Skip to content

Instantly share code, notes, and snippets.

@tychobrailleur
Created February 24, 2021 19:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tychobrailleur/8bc41e4adc930a2aad1f4ed159df369d to your computer and use it in GitHub Desktop.
Save tychobrailleur/8bc41e4adc930a2aad1f4ed159df369d to your computer and use it in GitHub Desktop.
NPE with darklaf when using a custom `TreeCellRenderer`
package com.weblogism.darklaf;
import com.github.weisj.darklaf.LafManager;
import com.github.weisj.darklaf.theme.DarculaTheme;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;
import java.awt.*;
public class TreeExample extends JFrame {
static class LovelyTreeCellRenderer implements TreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
final JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createLineBorder(Color.BLUE));
final JLabel label = new JLabel(String.valueOf(value));
panel.add(label);
return panel;
}
}
public TreeExample() {
setTitle("Lorem Ipsum");
// Deliberately keep window narrow to ensure labels will not be fully visible.
setSize(new Dimension(100, 140));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Daft Punk");
DefaultMutableTreeNode homeworkNode = new DefaultMutableTreeNode("Homework");
DefaultMutableTreeNode discoveryNode = new DefaultMutableTreeNode("Discovery");
DefaultMutableTreeNode humanAfterAllNode = new DefaultMutableTreeNode("Human After All");
DefaultMutableTreeNode randomAccessMemoriesNode = new DefaultMutableTreeNode("Random Access Memories");
root.add(homeworkNode);
root.add(discoveryNode);
root.add(humanAfterAllNode);
root.add(randomAccessMemoriesNode);
JPanel mainPanel = new JPanel();
final JTree tree = new JTree(root);
tree.setCellRenderer(new LovelyTreeCellRenderer());
mainPanel.add(new JScrollPane(tree));
getContentPane().add(mainPanel, BorderLayout.CENTER);
setVisible(true);
// Once window is visible, hover over the entries in the tree, NPE occurs.
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
LafManager.install(new DarculaTheme());
final TreeExample frame = new TreeExample();
frame.setVisible(true);
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment