Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ezhov-da/e94a9b899dc7d85e57f81f46576cd05a to your computer and use it in GitHub Desktop.
Save ezhov-da/e94a9b899dc7d85e57f81f46576cd05a to your computer and use it in GitHub Desktop.
java динамическое изменение иконки в дереве
[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