jtree+mysql_Swing: JTree显示 图标 + 文字 | 学步园
1.用到的類: JTree , ?DefaultMutableTreeNode, DefaultTreeCellRenderer
2.默認情況下節點顯示的是DefaultMutableTreeNode對象的setUserObject(Object obj)中obj的toString方法的返回值。
3.寫個類繼承DefaultTreeCellRenderer,重寫getTreeCellRendererComponent方法就可以了。
4.結果如圖:
5.代碼
1.User類
package lova.tree.pojo;
public class User {
private String account; //賬號
private String signature;//簽名
private String iconPath;//頭像路徑
public User(String account,String signature,String iconPath){
this.account = account;
this.signature = signature;
this.iconPath = iconPath;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public String getIconPath() {
return iconPath;
}
public void setIconPath(String iconPath) {
this.iconPath = iconPath;
}
public String toString(){
return " [ "+ account + "] " + signature;
}
}
2.Group類
package lova.tree.pojo;
public class Group {
private String name; //組名
public Group(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.窗口類CustomTreeFrame
package lova.tree;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import lova.tree.pojo.Group;
import lova.tree.pojo.User;
/*
* 自定義JTree的顯示需要設置渲染器
* 寫個類繼承DefaultTreeCellRenderer,重寫getTreeCellRendererComponent方法即可
*/
public class CustomTreeFrame extends JFrame{
private static final long serialVersionUID = 1L;
private JTree tree;
public CustomTreeFrame(){
/*
* 換一種LookAndFeel
*/
try {
javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}catch(Exception e){
e.printStackTrace();
}
this.setTitle("Custom Tree Test");
this.setSize(600, 500);
this.setLayout(new FlowLayout(FlowLayout.LEFT));
this.createUI();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void createUI(){
//創建JTree
tree = new JTree();
//創建根節點
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
rootNode.setUserObject(new Group("我的好友"));
User u1 = new User("seven","我叫龔順子!","G:/seven.jpg");
User u2 = new User("lova","lova-lova-lova-lova","G:/lena.jpg");
//節點默認顯示setUserObject(obj)中obj的toString方法的返回值
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(u1);
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(u2);
rootNode.add(node1);
rootNode.add(node2);
//創建Model
DefaultTreeModel model = new DefaultTreeModel(rootNode);
//設置Model
tree.setModel(model);
//設置JTree的渲染器
MyTreeCellRenderer renderer = new MyTreeCellRenderer();
tree.setCellRenderer(renderer);
//設置高度
tree.setRowHeight(45);
this.add(tree);
}
}
4.自定義的渲染類MyTreeCellRenderer
package lova.tree;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import lova.tree.pojo.Group;
import lova.tree.pojo.User;
public class MyTreeCellRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
//將value強制轉型
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String text = null; //要顯示的字符
ImageIcon icon = null;//要顯示的圖標
Object obj = node.getUserObject();
//判斷obj類型,若為User,則為子節點
if(obj instanceof User){
User user = (User) obj;
if(user.getSignature() != null){
text = user.getSignature();
}
//將圖標轉換為40*40尺寸的
if(user.getIconPath() != null){
icon = new ImageIcon(user.getIconPath());
Image img = icon.getImage();
img = img.getScaledInstance(40, 40, Image.SCALE_SMOOTH);
icon.setImage(img);
}
} //若obj類型是Group,則為根節點
else if(obj instanceof Group){
Group g = (Group) obj;
text = g.getName();
}
//若是子節點,則顯示圖標,根節點則不顯示
if(this.getParent() != tree.getModel().getRoot()){
this.setIcon(icon);
}
if(text != null){
this.setText(text);
}
//設置尺寸
this.setPreferredSize(new Dimension(300,40));
//設置字體
//this.setFont(new Font("宋體", Font.BOLD, 13));
//在設置了新的Look&Feel以后,下面代碼全部失效
//this.setTextNonSelectionColor(new Color(255,255,255));
//this.setTextSelectionColor(Color.red);
//this.setBackground(Color.WHITE);
//this.setBackgroundNonSelectionColor(Color.green);
//this.setBackgroundSelectionColor(Color.blue);
//this.setBorderSelectionColor(Color.red);
//
設置選中時的背景色
//if (selected) {
//if(row>0||leaf){
//this.setBackground(new Color(252,233,159));
//}
//
//} else {
//this.setBackground(new Color(255, 255, 255));
//
//}
return this;
}
}
5. 測試
public static void main(String[] args){
new CustomTreeFrame();
}
OK~ 希望對你有用
總結
以上是生活随笔為你收集整理的jtree+mysql_Swing: JTree显示 图标 + 文字 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨sql server查询mysql_S
- 下一篇: mysql on delete关键字_M