HOME | SITEMAP
Mengubah ICON pada JTree di JAVA
Posted on 2007-11-14 11:44:13 by mamat, 1 Comments
Mengubah ICON pada JTree di JAVA
Hehe, keliatannya sederhana yak tapi dah bikin gua pusing ampek dua hari, makanya diposting biar puas. Haaahhh, yes..!. hehe ini ekspresi gua waktu berhasil nyelesain.
Ok gak usah ba bi bu, lansung aja nanti tampilannya akan seperti ini sudara:

Nah pertama kita harus bikin data dulu, misal:
public void createNode(DefaultMutableTreeNode root) {
DefaultMutableTreeNode node = null;
DefaultMutableTreeNode client = null;
node = new DefaultMutableTreeNode("Node Jaringan 1");
root.add(node);
client = new DefaultMutableTreeNode("Client 1");
node.add(client);
client = new DefaultMutableTreeNode("Client 2");
node.add(client);
node = new DefaultMutableTreeNode("Node Jaringan 2");
root.add(node);
client = new DefaultMutableTreeNode("Client 1");
node.add(client);
}
Ok habis punya data yang akan kita buat tree sekarang kita renderer ulang tampilan si JTree yang sudah difault oleh JVMnya Java.
public void setChangeTree(JTree tree){
ImageIcon leafIcon = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/user-24.png"));
ImageIcon leafIconOff = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/Alert-24.png"));
ImageIcon openIcon = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/node_online_24.png"));
ImageIcon closeIcon = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/node_online_24.png"));
ImageIcon openIconOff = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/node_offline_24.png"));
ImageIcon closeIconOff = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/node_offline_24.png"));
// Update only one tree instance
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
renderer.setLeafIcon(leafIconOff);
renderer.setOpenIcon(openIconOff);
renderer.setClosedIcon(closeIcon);
tree.setCellRenderer(renderer);
// Create tree with new icons
tree = new JTree();
}
Bila kedua syarat udah dilakukan tinggal pakai aja, simple kan. Jadi nyadar lagi nih, mengapa orang berpengalaman itu lebih mahal dari pada pemula huhu :P.
private void formWindowActivated(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
//jButton6.setLabel("testing");
// Retrieve the three icons
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Monitoring Jaringan IP Alarm");
createNode(root);
DefaultTreeModel tree = new DefaultTreeModel(root);
jTree1.setModel(tree);
setChangeTree(jTree1);
}
Wah tapi cara di atas digunakan untuk merubah secara sederhana aja, gimana klo kita mengubah berdasarkan data base misal ketika kondisi A maka menggunakan ICON A trus ketika kondisi B menggunakan ICON B, hehe. Gak usah bingung ternyata ada cara lain yang disediakan oleh java yaitu render ulang aja. Intinya Data yang kita masukking ke Jtree taruh dalam suatu OBjek nanti digunakan sewaktu kita panggil. Ini adalah hasilnya

Bikin kelas kusus untuk merender tampilan JTree kita misal:
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
/**
*
* @author mamat-dev
*/
public class MyRenderer extends DefaultTreeCellRenderer {
Icon leafOn;
Icon leafOff;
Icon nodeOn;
Icon nodeOff;
public String text,ip;
public MyRenderer(Icon _leafOn,Icon _leafOff, Icon _nodeOn, Icon _nodeOff) {
leafOn = _leafOn;
leafOff = _leafOff;
nodeOn = _nodeOn;
nodeOff = _nodeOff;
}
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);
int i=0;
if(expanded){
if(i==1){
setIcon(nodeOn);
i=0;
} else {
setIcon(nodeOff);
}
} else if(leaf && isLeafOn(value)){
setIcon(leafOff);
setText(text+" (Alarm Aktif)");
i=1;
} else if(leaf) {
setIcon(leafOn);
} else {
if(i==1){
setIcon(nodeOn);
i=0;
} else {
setIcon(nodeOff);
}
}
return this;
}
//ini adalah waktu even Leaf
protected boolean isLeafOn(Object value) {
//ambil objectnya dari tree node
DefaultMutableTreeNode node =(DefaultMutableTreeNode)value;
ObjectTree nodeInfo = (ObjectTree)(node.getUserObject());
String title = nodeInfo.nodeStatus;
if (title.equals("0")) {
text = nodeInfo.nodeName;
return true;
}
return false;
}
}
Nah setelah bikin kelas setting aja tampilan icon yang diingankan, misal icon kondisi ON or icon kondisi OFF baik untuk root nya maupun cabangnya.
public void setChangeTree(JTree tree){
ImageIcon clientIcon = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/ipalarm-24.png"));
ImageIcon clientIconOff = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/Alert-24.png"));
ImageIcon nodeIcon = new ImageIcon(getClass().getResource("/ipalarmdesktop/images/monitor-24.png"));
// Update only one tree instance
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
if (clientIcon != null) {
tree.setCellRenderer(new MyRenderer(clientIcon,clientIconOff,nodeIcon,nodeIcon));
} else {
System.err.println("Tutorial icon missing; using default.");
}
// Create tree with new icons
tree = new JTree();
}
OK, sekarang tinggal tampilin deh..!
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Monitoring Jaringan IP Alarm");
createNode(root);
DefaultTreeModel tree = new DefaultTreeModel(root);
jTree1.setModel(tree);
setChangeTree(jTree1);
Eit MAATT..!, kok ada "createNode(root)"..? Yuup itu seperti contoh di atasnya struktur treenya, klo tampilan diatas sudah ane hubungkan dengan webservice yang memonitoring langsung keadaan sensor. Nah nih gua bagi tips bikin Event Timer yang fungsinya digunakan untuk memanggil METHOD secara terus menerus dan boleh dicatat karena kita menggunakan "import javax.swing.Timer" maka timer ini udah mengandung Thread jadi gak ganggu proses yang lain, Mantap kan :).
Action testing = new AbstractAction() {
boolean shouldDraw = false;
public void actionPerformed(ActionEvent e) {
if (shouldDraw = !shouldDraw) {
jLStatus.setText("Status: mengambil data sensor");
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Monitoring Jaringan IP Alarm");
createNode(root);
DefaultTreeModel tree = new DefaultTreeModel(root);
jTree1.setModel(tree);
setChangeTree(jTree1);
for(int i=0;i<jTree1.getRowCount();i++){
jTree1.expandRow(i+1);
}
} else {
jLStatus.setText("Status: Ok");
}
}
};
new Timer(3000, testing).start();
Other Articles
- Build War menggunakan Ant mamat, 2011-11-25 00:52:18
- Eclipse - Tomcat There are no resources that can be added or removed from the server mamat, 2011-11-24 11:59:13
- Contoh Code sederhana untuk Test JNDI DataSource mamat, 2011-04-07 13:44:13
- Reading from and Writing to a URLConnection mamat, 2010-06-08 17:27:55
- Membangun Service Oriented Architecture(SOA) dg EJB, Web Services, Hibernate, Spring dan Mysql (2) mamat, 2010-01-19 17:09:59
- Membangun Service Oriented Architecture(SOA) dg EJB, Web Services, Hibernate JPA, Spring dan Mysql (1) mamat, 2010-01-19 02:18:02
- Membuat Dokumentasi Class menggunakan Javadoc Tool. mamat, 2009-10-28 10:39:09
- Tutorial Spring, Hibernate dan Mysql CRUD(2) mamat, 2009-10-23 00:11:27
- J2ME HTTP Connection Send Text and Send Image then catch using Servlet(2) mamat, 2009-08-10 17:23:19
- One Manga Downloader using Java dan Linux. mamat, 2009-03-20 20:02:22
- J2ME HTTP Connection Send Text and Send Image then catch using Servlet(1) mamat, 2009-01-21 04:49:00
- Tutorial Spring, Hibernate dan Mysql CRUD(1) mamat, 2009-01-14 17:20:38
- Web Service Security mamat, 2008-12-24 18:13:18
- HttpConnection Untuk Load String dan Image mamat, 2008-09-05 16:04:19
- Bedah Code Mobile Kamus mamat, 2008-08-25 17:06:09
- Mobile Kamus mamat, 2008-08-19 15:31:49
- Contoh Source Code JAVA buat Kirim Email(JavaMail API) mamat, 2008-07-21 15:17:22
- Report with Jasper Report in SERVELET mamat, 2008-06-30 11:22:28
- JSP dan Servelet vs SQL2Java mamat, 2008-06-30 10:13:59
- SQL2Java Jadul tapi cepat mamat, 2008-06-20 11:50:58
- Example Source Code using RMS in J2ME mamat, 2008-05-27 13:57:07
- Simultan Load Image in JAVA mamat, 2008-05-01 10:40:34
- Contoh Source Code EJB vs Entity Databse Derby mamat, 2008-04-08 11:11:31
- Play Wav in Java (Streaming jug bisa) mamat, 2008-03-31 14:35:27
- Create Icon Frame in Java(Bikin Icon di Frame Java) mamat, 2008-03-12 10:11:15
- "GPSylon" Framework buat Tracking GPS di JAVA mamat, 2008-02-19 13:55:04
- Bikin Extreme GUI di Java mamat, 2008-02-03 22:13:20
- Mengubah ICON pada JTree di JAVA mamat, 2007-11-14 11:44:13
- Bikin Annotations di Java mamat, 2007-11-12 09:27:10
- Targeting GPS - Integrating J2ME, GPS, and the Wireless Web mamat, 2007-11-02 10:40:56
- Understanding Spring Packaging mamat, 2007-10-05 14:59:34
- SPRING FRAMEWORK mamat, 2007-09-19 13:16:57
- Free Hosting JAVA Server(myjavaserver.com) mamat, 2007-08-14 12:53:22
- JavaFX (Imagine the Possibilities) mamat, 2007-07-19 13:08:50
- Capture Image and send on Server(J2ME) mamat, 2007-07-17 00:00:00

