17 Nisan 2009 Cuma

Dynamic JTree

Database'de iki table olduğunu varsayalım, child larımızı tuttuğumuz “guide” ve node ları tuttuğumuz “groupguide”

guide :
Long id ;
String name;
Long groupid;

groupguide
:
Long id;
String name;
veri tabanımıza verileri yükleyelim;

INSERT INTO `groupguide` (`id`, `name`) VALUES(1, 'group1'),(2, 'group2');

INSERT INTO `guide` (`id`, `name`, `groupid`) VALUES (1, 'Name1', 1), (2, 'Name2', 2);

Guide için bir class yazalım,

public class TreeSampleAction {
List treeSampleActionList= new ArrayList();
private Long id;
private String name;
DataBaseConnection conn= new DataBaseConnection();

// Bunları set ve get fonksiyonlarını yazalım

/**
*
* @param id
* @return
* veri tabanından çektiğimiz, gruba göre guide listesi döndürür.
*
*/
public List getDataById(Long id) {
try {
TreeSampleAction treeSampleAction = null;
treeSampleActionList = new ArrayList();
String str = "SELECT * FROM guide where groupid=" + id;
ResultSet rs = null;
rs = conn.get(str);
if (rs != null) {

while (rs.next()) {
treeSampleAction = new TreeSampleAction();
treeSampleAction.setId(rs.getLong("id"));
treeSampleAction.setName(rs.getString("name"));
getTreeSampleActionList().add(treeSampleAction);
}

}

rs.close();
conn.connClose();
} catch (SQLException ex) {
Logger.getLogger(TreeSampleAction.class.getName()).log(Level.SEVERE, null, ex);
}
return this.getTreeSampleActionList();
}
}

Group için bir class yazalım,

public class TreeSampleGroupAction {
List treeSampleActionGroupList= new ArrayList();
DataBaseConnection conn= new DataBaseConnection();
private Long id;
private String name;
// Bunları set ve get fonksiyonlarını yazalım
/**
*
* @param id
* @return
* veri tabanından çektiğimiz grub listesi döndürür.
*
*/

public List getData() {
try {
TreeSampleGroupAction treeSampleGroupAction = null;
treeSampleActionGroupList = new ArrayList();
String str = "SELECT * FROM groupguide";
ResultSet rs = null;
rs = conn.get(str);
if (rs != null) {

while (rs.next()) {
treeSampleGroupAction = new TreeSampleGroupAction();
treeSampleGroupAction.setId(rs.getLong("id"));
treeSampleGroupAction.setName(rs.getString("name"));
treeSampleActionGroupList.add(treeSampleGroupAction);
}


}

rs.close();
conn.connClose();
} catch (SQLException ex) {
Logger.getLogger(TreeSampleGroupAction.class.getName()).log(Level.SEVERE, null, ex);
}


return this.treeSampleActionGroupList;
}
}

JTree'i gösterebileceğimiz bir Frame yaratalım,

public class TreeSampleFrame extends javax.swing.JFrame {
/**
* Kullandığımız Değişkenler
*/

Vector vect;
Vector rightVect;
DefaultMutableTreeNode rootNode;
DefaultMutableTreeNode childNode, grandchildNode;
DefaultTreeModel treeModel;
TreeSampleAction treeSampleAction;
List treeSampleActionList;
TreeSampleGroupAction treeSampleGroupAction;
List treeSampleGroupActionList;

/** TreeSampleFrame Türünde Yeni Bir Form Oluşturalım */

public TreeSampleFrame() {
initComponents();
// Tree 'i oluşturup verilerimizi set lemek için kullandığımız metod
SetTreeValues();

}

/**
* JTree ye verilermizi setlediğimiz metod
*/

public void SetTreeValues() {
//grupları tutacağımız liste tanımlayalım
List treeSampleGroupActionList = new ArrayList();
// guideları tutacağımız liste tanımlayalım
List treeSampleActionList = new ArrayList();
//group için bir nesne tanımlayalım
TreeSampleGroupAction treeSampleGroupAction = new TreeSampleGroupAction();
// guide için bir nesne tanımlayalım
TreeSampleAction treeSampleAction = new TreeSampleAction();
Vector vect = new Vector(); // child ları ekleyeceğimiz Vector
//Node ları tutacağımız bir root Node tanımlayalım
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Tree Sample");
// veri tabanında sakladığımız grup verilerini tanımladığımız grup listesine ekleyelim
treeSampleGroupActionList = treeSampleGroupAction.getData();

for (TreeSampleGroupAction treeGroup : treeSampleGroupActionList) {
//her bir grubu bir node olarak tanımlayalım
DefaultMutableTreeNode node = new DefaultMutableTreeNode(treeGroup);
// her bir grubun üyelerini yani guide listesini veri tabanından çekelim
treeSampleActionList = treeSampleAction.getDataById(treeGroup.getId());

if (treeSampleActionList.size() != 0) {
// her bir guide'ı vector' e ekleyelim
for (TreeSampleAction branch : treeSampleActionList) {
vect.add(branch);
}
// her bir vector u Node lara ekleyelim yani grubun altına guide ları ekleyelim
JTree.DynamicUtilTreeNode.createChildren(node, vect); //this is the hard one
// oluşturulan node 'u Root Node' a ekleyelim
rootNode.add(node);
}
//vector'ü ve Guide listesini temizleyelim
vect.removeAllElements();
treeSampleActionList.clear();
}
// Oluşturduğumuz Root Node ile TreeModel'i oluşturalım.
treeModel = new DefaultTreeModel(rootNode);
// JTree' e treeModel i setleyelim
jTree.setModel(treeModel);
}

Frame 'i run ettiğimizde karşımıza aşağıdaki ekran çıkacaktır.



burada eklediğimiz node ve child lar da görülecek isimler istediğimiz formatta olmayabilir bunun için toString metodu tanımlamamız gerekiyor. Bu metod u oluşturduğumuz “TreeSampleGroupAction” ve “TreeSampleAction” class larımıza ekleyelim.

@Override
public String toString() {
return this.getName();
}
Frame'i tekrar run ettiğimizde,




Hiç yorum yok:

Yorum Gönder