在JTree中选择叶子节点时,我编写了以下代码来填充背景色。 但是,只有当我单击下面红色区域中的叶子图标和叶子节点时,背景颜色才会更改。 发生这种情况似乎是因为在红色区域之外单击TreePath时,它返回null。当我在叶子节点所在的行上的任意位置单击时,我想填充背景色。
JTree menuTree = new JTree(root) {
private Color SELECTED_COLOR = Color.DARK_GRAY;
@Override
public void paintComponent(Graphics g) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
if (getSelectionCount() > 0) {
g.setColor(SELECTED_COLOR);
// @see http://ateraimemo.com/Swing/TreeRowSelection.html
for (int i : getSelectionRows()) {
Rectangle r = getRowBounds(i);
g.fillRect(0, r.y, getWidth(), r.height);
}
}
super.paintComponent(g);
if (getLeadSelectionPath() != null) {
Rectangle r = getRowBounds(getRowForPath(getLeadSelectionPath()));
g.setColor(hasFocus() ? SELECTED_COLOR.darker() : SELECTED_COLOR);
g.drawRect(0, r.y, getWidth() - 1, r.height - 1);
}
}
};
图片在链接下方。