JTree有不同颜色的树线?

是否有可能在两个兄弟节点之间有不同的彩色树线?

我想通过连接它们的蓝线来显示这两个节点是链接的。 但是整个JTree默认颜色是灰色或黑色的角度线。 某些节点之间可能有部分不同的彩色线条吗?

要更改树中行的颜色,您需要子类BasicTreeUI并至少覆盖4个方法:

  • paintHorizo​​ntalLine
  • paintHorizo​​ntalPartOfLeg
  • paintVerticalLine
  • paintVerticalPartOfLeg

可以在此处找到扩展BasicTreeUI的示例

也许

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeCellRenderer; class TreeNodeVectorA extends Vector { private static final long serialVersionUID = 1L; private String name; TreeNodeVectorA(String name) { this.name = name; } TreeNodeVectorA(String name, E elements[]) { this.name = name; for (int i = 0, n = elements.length; i < n; i++) { add(elements[i]); } } @Override public String toString() { return "[" + name + "]"; } } class Employee { public String firstName; public String lastName; public float salary; Employee(String f, String l, float s) { this.firstName = f; this.lastName = l; this.salary = s; } } class EmployeeCellRenderer implements TreeCellRenderer { private JLabel firstNameLabel = new JLabel(" "); private JLabel lastNameLabel = new JLabel(" "); private JLabel salaryLabel = new JLabel(" "); private JPanel renderer = new JPanel(); private DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer(); private Color backgroundSelectionColor; private Color backgroundNonSelectionColor; EmployeeCellRenderer() { firstNameLabel.setForeground(Color.BLUE); renderer.add(firstNameLabel); lastNameLabel.setForeground(Color.BLUE); renderer.add(lastNameLabel); salaryLabel.setHorizontalAlignment(JLabel.RIGHT); salaryLabel.setForeground(Color.RED); renderer.add(salaryLabel); renderer.setBorder(BorderFactory.createLineBorder(Color.BLACK)); backgroundSelectionColor = defaultRenderer.getBackgroundSelectionColor(); backgroundNonSelectionColor = defaultRenderer.getBackgroundNonSelectionColor(); } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Component returnValue = null; if ((value != null) && (value instanceof DefaultMutableTreeNode)) { Object userObject = ((DefaultMutableTreeNode) value).getUserObject(); if (userObject instanceof Employee) { Employee e = (Employee) userObject; firstNameLabel.setText(e.firstName); lastNameLabel.setText(e.lastName); salaryLabel.setText("" + e.salary); if (selected) { renderer.setBackground(backgroundSelectionColor); } else { renderer.setBackground(backgroundNonSelectionColor); } renderer.setEnabled(tree.isEnabled()); returnValue = renderer; } } if (returnValue == null) { returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); } return returnValue; } } public class EmployeeTree { public static void main(String args[]) { JFrame frame = new JFrame("Book Tree"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Employee javaBooks[] = {new Employee("A", "F", 9.99f), new Employee("B", "E", 4.99f), new Employee("C", "D", 9.95f)}; Employee netBooks[] = {new Employee("AA", "CC", 9.99f), new Employee("BB", "DD", 9.99f)}; Vector javaVector = new TreeNodeVectorA("A", javaBooks); Vector netVector = new TreeNodeVectorA("As", netBooks); Object rootNodes[] = {javaVector, netVector}; Vector rootVector = new TreeNodeVectorA("Root", rootNodes); JTree tree = new JTree(rootVector); TreeCellRenderer renderer = new EmployeeCellRenderer(); tree.setCellRenderer(renderer); JScrollPane scrollPane = new JScrollPane(tree); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 300); frame.setVisible(true); } private EmployeeTree() { } } 

您必须使用适合您需求的TreeCellRenderer 。