Last active
March 10, 2019 12:21
-
-
Save ezhov-da/e94a9b899dc7d85e57f81f46576cd05a to your computer and use it in GitHub Desktop.
java динамическое изменение иконки в дереве
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[code:]java[:code] | |
import java.awt.Component; | |
import java.awt.event.MouseEvent; | |
import java.awt.event.MouseMotionAdapter; | |
import java.util.logging.Level; | |
import java.util.logging.Logger; | |
import javax.swing.ImageIcon; | |
import javax.swing.JFrame; | |
import javax.swing.JLabel; | |
import javax.swing.JScrollPane; | |
import javax.swing.JTree; | |
import javax.swing.SwingUtilities; | |
import javax.swing.UIManager; | |
import javax.swing.tree.DefaultTreeCellRenderer; | |
import javax.swing.tree.TreePath; | |
/** | |
* | |
* @author ezhov_da | |
*/ | |
public class TestTreeNodeIcon | |
{ | |
private static final Logger LOG = Logger.getLogger(TestTreeNodeIcon.class.getName()); | |
private TreePath lastTreePath; | |
public static void main(String[] args) | |
{ | |
TestTreeNodeIcon testTreeNodeIcon = new TestTreeNodeIcon(); | |
testTreeNodeIcon.start(); | |
} | |
private void start() | |
{ | |
SwingUtilities.invokeLater(new Runnable() | |
{ | |
@Override | |
public void run() | |
{ | |
try | |
{ | |
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) | |
{ | |
if ("Nimbus".equals(info.getName())) | |
{ | |
UIManager.setLookAndFeel(info.getClassName()); | |
break; | |
} | |
} | |
} catch (Exception e) | |
{ | |
try | |
{ | |
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); | |
} catch (Exception ex) | |
{ | |
Logger.getLogger(TestTreeNodeIcon.class.getName()).log(Level.SEVERE, null, ex); | |
} | |
} | |
JFrame frame = new JFrame("_________"); | |
JTree tree = new JTree(); | |
tree.addMouseMotionListener(new MouseMotionAdapter() | |
{ | |
@Override | |
public void mouseMoved(MouseEvent e) | |
{ | |
int r = tree.getClosestRowForLocation(e.getX(), e.getY()); | |
TreePath treePath = tree.getClosestPathForLocation(e.getX(), e.getY()); | |
System.out.println(treePath); | |
lastTreePath = treePath; | |
tree.repaint(); | |
} | |
}); | |
tree.setCellRenderer(new OwnRender()); | |
frame.add(new JScrollPane(tree)); | |
frame.setSize(600, 600); | |
frame.setLocationRelativeTo(null); | |
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
frame.setVisible(true); | |
} | |
}); | |
} | |
class OwnRender extends DefaultTreeCellRenderer | |
{ | |
@Override | |
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) | |
{ | |
JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); | |
System.out.println("hasFocus? --> " + value + ":" + hasFocus); | |
System.out.println("sel? --> " + value + ":" + sel); | |
if (lastTreePath != null) | |
{ | |
if (lastTreePath.getLastPathComponent() == value) | |
{ | |
label.setIcon(new ImageIcon(TestTreeNodeIcon.class.getResource("/ru/ezhov/test/src/add_filter_initiator_16x16.png"))); | |
} | |
} | |
return this; | |
} | |
} | |
} | |
[/code] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment