1.swing的JTree结点图标能不能设置为动画图标,如果能怎么实现?
2.JTable里面的某一列数据想显示为图标,怎么做?最好详细说说实现的步骤
2.JTable里面的某一列数据想显示为图标,怎么做?最好详细说说实现的步骤
解决方案 »
- JAVA下载安装
- 关于Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException的问题
- 求一个正则表达式
- java 高手请进
- 写文件时怎样指定从N字节开始写W长的字节~
- 请高手来看一看我的这个问题 关于一个NullPointerException错误的!!
- 显示的时候,怎么实现在图片上面写文字
- 关于接口????
- 斑竹,救救我!各位大虾,打搅一下,不好意思!专家门诊做得真不错,我很想用Offilne Explorer把它当下来,但下载下来浏览时,具体的帖子内容总是看不见,那页在出现“正在等待连接,请稍后”几个字后,总是变成一片空白,唉,怎么办呢?
- 房贷计算器
- 咋多线程变成单线程了?
- 关于打包的问题
把要显示的图形类型模式改成gif的就可以了。2.JTable里面的某一列数据想显示为图标,怎么做?
要用多层嵌套。
class MyRender extends JLabel implements TableCellRenderer
{
Icon icon;
public MyRender(Icon icon)
{
this.icon = icon;
}
public component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
//假设将第一列设为图标
if(column == 0)
{
this.setIcon(icon);
}
return this;
}}
...
...
jTable.setDefaultRenderer(columnClass,new MyRender(icon))
import java.awt.Component;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.ImageObserver;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;/**
* @version 1.0 06/20/99
*/
public class AnimatedIconTreeExample2 extends JFrame {
final static String CAT = "cat"; final static String DOG = "dog"; public AnimatedIconTreeExample2() {
super("AnimatedIconTreeExample2");
String[] strs = { "CARNIVORA", // 0
"Felidae", // 1
"Acinonyx jutatus (cheetah)", // 2
"Panthera leo (lion)", // 3
"Canidae", // 4
"Canis lupus (wolf)", // 5
"Lycaon pictus (lycaon)", // 6
"Vulpes Vulpes (fox)" }; // 7 IconNode[] nodes = new IconNode[strs.length];
for (int i = 0; i < strs.length; i++) {
nodes[i] = new IconNode(strs[i]);
}
nodes[0].add(nodes[1]);
nodes[0].add(nodes[4]);
nodes[1].add(nodes[2]);
nodes[1].add(nodes[3]);
nodes[4].add(nodes[5]);
nodes[4].add(nodes[6]);
nodes[4].add(nodes[7]); // If you want to share the ImageIcon with a node. nodes[2].setIconName(CAT);
nodes[3].setIconName(CAT);
nodes[5].setIconName(DOG);
nodes[6].setIconName(DOG);
nodes[7].setIconName(DOG); Hashtable icons = new Hashtable();
icons.put(CAT, new ImageIcon("Java2sAnimation.gif"));
icons.put(DOG, new ImageIcon("Java2sAnimation.gif")); JTree tree = new JTree(nodes[0]);
tree.putClientProperty("JTree.icons", icons);
tree.setCellRenderer(new IconNodeRenderer());
setImageObserver(tree, nodes, icons); JScrollPane sp = new JScrollPane(tree);
getContentPane().add(sp, BorderLayout.CENTER);
} private void setImageObserver(JTree tree, IconNode[] nodes, Hashtable icons) {
Hashtable observers = new Hashtable(); for (int i = 0; i < nodes.length; i++) {
ImageIcon icon = (ImageIcon) nodes[i].getIcon();
if (icon != null) {
Vector repaintNodes = new Vector();
repaintNodes.addElement(nodes[i]);
icon
.setImageObserver(new NodeImageObserver(tree,
repaintNodes));
} else {
String iconName = nodes[i].getIconName();
if (iconName != null) {
Vector repaintNodes = (Vector) observers.get(iconName);
if (repaintNodes == null) {
repaintNodes = new Vector();
observers.put(iconName, repaintNodes);
}
repaintNodes.addElement(nodes[i]);
}
}
} Enumeration e = observers.keys();
while (e.hasMoreElements()) {
String iconName = (String) e.nextElement();
Vector repaintNodes = (Vector) observers.get(iconName);
ImageIcon icon = (ImageIcon) icons.get(iconName);
icon.setImageObserver(new NodeImageObserver(tree, repaintNodes));
}
} class NodeImageObserver implements ImageObserver {
JTree tree; DefaultTreeModel model; Vector nodes; NodeImageObserver(JTree tree, Vector nodes) {
this.tree = tree;
this.model = (DefaultTreeModel) tree.getModel();
this.nodes = nodes;
} public boolean imageUpdate(Image img, int flags, int x, int y, int w,
int h) {
if ((flags & (FRAMEBITS | ALLBITS)) != 0) {
Enumeration e = nodes.elements();
while (e.hasMoreElements()) {
TreeNode node = (TreeNode) e.nextElement();
TreePath path = new TreePath(model.getPathToRoot(node));
Rectangle rect = tree.getPathBounds(path);
if (rect != null) {
tree.repaint(rect);
}
}
}
return (flags & (ALLBITS | ABORT)) == 0;
}
} public static void main(String args[]) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {}
AnimatedIconTreeExample2 frame = new AnimatedIconTreeExample2();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(280, 200);
frame.setVisible(true);
}
}class IconNodeRenderer extends DefaultTreeCellRenderer { public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,
row, hasFocus); Icon icon = ((IconNode) value).getIcon(); if (icon == null) {
Hashtable icons = (Hashtable) tree.getClientProperty("JTree.icons");
String name = ((IconNode) value).getIconName();
if ((icons != null) && (name != null)) {
icon = (Icon) icons.get(name);
if (icon != null) {
setIcon(icon);
}
}
} else {
setIcon(icon);
} return this;
}
}class IconNode extends DefaultMutableTreeNode { protected Icon icon; protected String iconName; public IconNode() {
this(null);
} public IconNode(Object userObject) {
this(userObject, true, null);
} public IconNode(Object userObject, boolean allowsChildren, Icon icon) {
super(userObject, allowsChildren);
this.icon = icon;
} public void setIcon(Icon icon) {
this.icon = icon;
} public Icon getIcon() {
return icon;
} public String getIconName() {
if (iconName != null) {
return iconName;
} else {
String str = userObject.toString();
int index = str.lastIndexOf(".");
if (index != -1) {
return str.substring(++index);
} else {
return null;
}
}
} public void setIconName(String name) {
iconName = name;
}}gif动画做Jtree结点的图标,被我找到了,放上来。
{
Icon icon;
public MyRender(Icon icon)
{
this.icon = icon;
}
public component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
//假设将第一列设为图标
if(column == 0)
{
this.setIcon(icon);
}
return this;
}}
...
...
jTable.setDefaultRenderer(columnClass,new MyRender(icon))
用了这个,不仅第一列有图标,整行都带图标了
{
Icon icon;
public MyRender(Icon icon)
{
this.icon = icon;
}
public component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
//假设将第一列设为图标
JLabel ret = new JLabel();
ret.setText(value.toString());
if(column == 0)
{
ret.setIcon(icon);
}
return ret;
}}
...
...
jTable.setDefaultRenderer(columnClass,new MyRender(icon))
这样应该没有问题了。