我想在JTree中对元素进行着色.但是,仅仅在标签上添加背景颜色看起来有点奇怪.特别是如果选择了多个节点,则生成的形状看起来粗糙且分散注意力.
有没有办法让背景扩展树元素的整个宽度,以便整行变成彩色?从左边框开始或从标签的开头开始,但绝对延伸到组件的右边界?
这是一个基于这个问题的小型自包含演示.
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
public class SO26724913 {
public static void main(String[] args) {
DefaultMutableTreeNode a = new DefaultMutableTreeNode("a");
DefaultMutableTreeNode b = new DefaultMutableTreeNode("b");
DefaultMutableTreeNode c = new DefaultMutableTreeNode("c");
a.add(b);
a.add(c);
final JTree tree = new JTree(a);
tree.setCellRenderer(new DefaultTreeCellRenderer() {
@Override
public Component getTreeCellRendererComponent
(JTree tree, Object value, boolean selected,
boolean expanded, boolean leaf, int row, boolean focus)
{
JComponent c = (JComponent)
super.getTreeCellRendererComponent
(tree, value, selected, expanded, leaf, row, …Run Code Online (Sandbox Code Playgroud) 伙计们,
我正在尝试创建一个渐变JTree控件.除了树单元格的背景不透明外,以下代码大部分都有效.如果有人打电话告诉我,我做得不对,我将不胜感激.
预先感谢您的帮助.
问候,
彼得
package TestPackage;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;
public class Test {
public Test() {
JFrame frame = new JFrame();
JPanel framePanel = new JPanel();
framePanel.setLayout(new BorderLayout());
frame.setContentPane(framePanel);
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Item");
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode("Child");
rootNode.add(childNode);
GradientTree tree = new GradientTree(rootNode);
// JTree tree = new JTree(rootNode);
// tree.setBackground(Color.blue);
tree.setCellRenderer(new MyRenderer());
JScrollPane scroll = new JScrollPane(tree);
scroll.setOpaque(false);
framePanel.add(scroll, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) { …Run Code Online (Sandbox Code Playgroud)