3
A
回答
6
要更改樹線條的顏色,你會需要繼承BasicTreeUI並覆蓋至少4種方法:
一個例子延伸BasicTreeUI can be found here
1
您必須使用適合您需求的TreeCellRenderer。
2
可以是
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<E> extends Vector<E> {
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<Employee> javaVector = new TreeNodeVectorA<Employee>("A", javaBooks);
Vector<Employee> netVector = new TreeNodeVectorA<Employee>("As", netBooks);
Object rootNodes[] = {javaVector, netVector};
Vector<Object> rootVector = new TreeNodeVectorA<Object>("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() {
}
}
相關問題
- 1. 不同的顏色線與matp plotpc
- 2. 地塊與集線顏色與顯示顏色略有不同
- 3. JTree選擇顏色
- 4. CSS:線條通過與文本顏色不同的顏色?
- 5. 顏色行中的JTree
- 6. 將顏色與紋理顏色不同
- 7. 與highstock圖中同一系列線的顏色不同?
- 8. 與標籤顏色不同
- 9. 顏色與線條
- 10. DataGridView中的不同顏色的線(DGV)
- 11. 使樹狀圖中的刻度線顏色與簇顏色匹配
- 12. 組線與分散組相同顏色
- 13. Seaborn圖表顏色與調色板指定的顏色不同
- 14. 具有不同顏色的線對MATLAB
- 15. MFC:繪製不同顏色的線
- 16. 多段線段的不同顏色
- 17. ggplot2繪製了與屬於不同組的實線相同顏色的虛線
- 18. 與R中的點不同的線條顏色
- 19. 環路與不同的顏色密度線路中的R
- 20. 覆蓋選擇顏色 - JTree的
- 21. 我在iphone中的顏色與我miniMac中的顏色不同?
- 22. EDITTEXT變線顏色和文本顏色不同
- 23. 不同顏色
- 24. 更改與父文本顏色不同的子文本顏色?
- 25. 顏色繪製不同的顏色matplotlib
- 26. OpenTK:與VBO使用不同的顏色
- 27. 不能更改顏色線與chart.js
- 28. 與TD相同的顏色
- 29. 使用xyplot不同類型的線的不同顏色
- 30. R:geom_contour中不同輪廓線的顏色不同