Dodawanie nodów JTree

0

Cześć i czołem!

Uczę się właśnie JTree i mam taką drobną aplikacyjkę:

Interface.jpg

Przy uruchamianiu programiku JTree jest budowany na podstawie bazy danych SQL. Chciałbym jednak, by nodami nie były całe nazwiska, ale kolejne litery alfabetu w zależności od tego, czy nazwisko na taką literę alfabetu występuje w bazie, czy też nie. Poniżej kod metody i obsadzania JTree:

// Metoda robiąca nodki i listki
private DefaultMutableTreeNode processHierarchy(Object[] hierarchy)
{
   DefaultMutableTreeNode node = new DefaultMutableTreeNode(hierarchy[0]);
   DefaultMutableTreeNode child;
 
   for (int i = 1; i < hierarchy.length; i++)
   {
      Object nodeSpecifier = hierarchy[i];
 
      if (nodeSpecifier instanceof Object[])
      {
         child = processHierarchy((Object[])nodeSpecifier);
      }
      else
      {
         child = new DefaultMutableTreeNode(nodeSpecifier);
      }
      node.add(child);
   }
   return (node);
}
 
// Tworzę listę, którą obsadzam wynikami z zapytania do bazy danych
ArrayList list = new ArrayList();
list.add("Pacjenci");
try
{
   String sql = "SELECT LastName, FirstName FROM pacjenci ORDER BY LastName";
 
   ps = conn.prepareStatement(sql);
   rs = ps.executeQuery();
 
   while (rs.next())
   {
      Object value[] = {rs.getString(1), rs.getString(2)};
      list.add(value);
   }
}
catch (Exception e)
{
   JOptionPane.showMessageDialog(null, e);
}
Object hierarchy[] = list.toArray();
DefaultMutableTreeNode root = processHierarchy(hierarchy);
JTree tree = new JTree(root);
scrollPane.setViewportView(tree);

Co mógłbym zrobić, by w zależności od tego, czy nazwisko na daną literę alfabetu istnieje, czy też nie, tworzyć nod o nazwie danej litery np. "N" i w nim osadzać w postaci listków wszystkie nazwiska na "N" w postaci np. "Nowicki, Rafał"? Będę naprawdę wdzięczny za wskazówki!

Pozdrawiam ciepło!

0

nie wiem czy rozwiązałeś problem czy nie, chce tylko przytoczyć propozycje. według mnie powinieneś sczytywać pojedynczo dane w postaci imię nazwisko,ułatwi ci to robote. Ja sobie dla testów napisałem to tak

String tabtest[] = {"a","b","c","d","e","f","g","h","i","j","k","l"};
	String tabtest2[] = {"andriu","bbbb","cccc","ddd","eee","fsdf","gsdf","hsdf","isdf","jsdf","ksdf","lsdf"};
	private void createNodes(DefaultMutableTreeNode top) {
	    DefaultMutableTreeNode category = null;
	    DefaultMutableTreeNode book = null;
	    int a = 0;
	    for(String g : tabtest){
	    if(tabtest2[a].substring(0, 1).equals(g)){
	    	 category = new DefaultMutableTreeNode(g.toString().toUpperCase());
	 	    top.add(category);
	    	book = new DefaultMutableTreeNode(new BookInfo
			        ("Robert",
			        tabtest2[a]));
			    category.add(book);
	    }
	    a++;
	    }
	}

klasa Book jest to klasa przykładowa ze strony oracla i zwraca ona tylko wprowadzone stringi. Wyjaśniam jak u mnie to działa: pierwsza tablica to alfabet do którego porównujemy pierwszą litere, oczywiście istnieje jeszcze inna metoda ale ta jest naj..najprostsza, ponieważ powinno być tak że i druga litera nazwiska jest sortowana i zapisywana w odpowiedniej kolejności, jak chcesz zaawansowane sortowanie to musisz przeprowadzić je poza jtree i zapisać nazwiska do osobnych tablic najlepiej dwuwymiarowych gdzie pozycjami wierszy będą litery z alfabetu a nazwiska kolumnami - wcześniej posortowane bombelkowo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1