请看类:
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class CheckTreeCellRenderer extends JPanel implements TreeCellRenderer{
private CheckTreeSelectionModel selectionModel;
private TreeCellRenderer delegate;
public TristateCheckBox checkBox = new TristateCheckBox(); public CheckTreeCellRenderer(TreeCellRenderer delegate, CheckTreeSelectionModel selectionModel){
this.delegate = delegate;
this.selectionModel = selectionModel;
setLayout(new BorderLayout());
setOpaque(false);
checkBox.setOpaque(false);
}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus){
Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
TreePath path = tree.getPathForRow(row);
if(path!=null){
if(selectionModel.isPathSelected(path, true))
checkBox.setState(TristateCheckBox.SELECTED); else
checkBox.setState(selectionModel.isPartiallySelected(path) ? null : TristateCheckBox.NOT_SELECTED);
}
removeAll();
renderer.addMouseListener(new MouseAdapter() {
public void mouseExited(MouseEvent e) {
System.out.println("dddddddddddddddddd");
setForeground(Color.black);
}
public void mouseEntered(MouseEvent e) {
setForeground(Color.red);
}
public void mouseClicked(MouseEvent me){ }
});
add(checkBox, BorderLayout.WEST);
add(renderer, BorderLayout.CENTER);
return this;
}
}
这是一个checktree,面板WEST加载checkBox,CENTER加载renderer
如果直接写renderer.setForeground(Color.red);则树节点字的颜色全部会变成红色,
这里我写renderer鼠标事件,想要达到当鼠标进入renderer时树节点字颜色变成红色,移出鼠标时变成黑色,为什么这个事件不执行?
或是有什么别的方法,可以让鼠标进入与离开树节点时该节点颜色发生变化?
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class CheckTreeCellRenderer extends JPanel implements TreeCellRenderer{
private CheckTreeSelectionModel selectionModel;
private TreeCellRenderer delegate;
public TristateCheckBox checkBox = new TristateCheckBox(); public CheckTreeCellRenderer(TreeCellRenderer delegate, CheckTreeSelectionModel selectionModel){
this.delegate = delegate;
this.selectionModel = selectionModel;
setLayout(new BorderLayout());
setOpaque(false);
checkBox.setOpaque(false);
}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus){
Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
TreePath path = tree.getPathForRow(row);
if(path!=null){
if(selectionModel.isPathSelected(path, true))
checkBox.setState(TristateCheckBox.SELECTED); else
checkBox.setState(selectionModel.isPartiallySelected(path) ? null : TristateCheckBox.NOT_SELECTED);
}
removeAll();
renderer.addMouseListener(new MouseAdapter() {
public void mouseExited(MouseEvent e) {
System.out.println("dddddddddddddddddd");
setForeground(Color.black);
}
public void mouseEntered(MouseEvent e) {
setForeground(Color.red);
}
public void mouseClicked(MouseEvent me){ }
});
add(checkBox, BorderLayout.WEST);
add(renderer, BorderLayout.CENTER);
return this;
}
}
这是一个checktree,面板WEST加载checkBox,CENTER加载renderer
如果直接写renderer.setForeground(Color.red);则树节点字的颜色全部会变成红色,
这里我写renderer鼠标事件,想要达到当鼠标进入renderer时树节点字颜色变成红色,移出鼠标时变成黑色,为什么这个事件不执行?
或是有什么别的方法,可以让鼠标进入与离开树节点时该节点颜色发生变化?
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
http://topic.csdn.net/u/20080124/08/b14ab841-be1e-4d0d-b16e-52f77fd3a764.html?seed=1573367784
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreePath;
public class T
{
public static void main(String[] args)
{
JTree tree = new JTree();
tree.setCellRenderer(new TestTreeCellRenderer());
JFrame f = new JFrame();
f.getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}class TestTreeCellRenderer extends DefaultTreeCellRenderer implements MouseMotionListener
{
private TreePath currentTreePath;
private boolean listenerAdded = false; @Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus)
{
if (!listenerAdded && tree != null) {
tree.addMouseMotionListener(this);
listenerAdded = true;
}
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (currentTreePath != null && currentTreePath.getLastPathComponent() == value) {
setForeground(Color.RED);
} return this;
} public void mouseDragged(MouseEvent e)
{
} public void mouseMoved(MouseEvent e)
{
JTree tree = (JTree) e.getSource();
TreePath path = tree.getPathForLocation(e.getX(), e.getY());
TreePath oldPath = currentTreePath;
if (path == null) {
currentTreePath = null;
}
else {
currentTreePath = path;
}
if (oldPath != null) {
Rectangle pathBounds = tree.getPathBounds(oldPath);
if (pathBounds != null) {
tree.repaint(pathBounds);
}
}
if (currentTreePath != null) {
Rectangle pathBounds = tree.getPathBounds(currentTreePath);
if (pathBounds != null) {
tree.repaint(pathBounds);
}
}
}
}