JTree Struktur im Nachhinein ändern

Status
Nicht offen für weitere Antworten.

lomtas

Mitglied
Versuche gerade die Struktur eines JTrees im nachhinein zu ändern. Dies gestaltet sich jedoch schwieriger als gedacht. Das Programm möchte ich benutzen, um MySQL Datenbanken zu visualisieren. Funktioniert auch schon im seperaten Fenster, dass die Struktur dargestellt wird. Jetzt möchte ich jedoch die Strukur in meinen dafür vorgesehenen Tree bekommen - wie mache ich das?

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import com.mysql.jdbc.Driver;
import java.sql.*;
import java.lang.Class;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 23.02.2007
  * @author
  */

public class test extends JFrame {
  // Anfang Variablen
  private JTextField datenbank = new JTextField();
  private JTextField user = new JTextField();
  private JTextField host = new JTextField();
  private JPasswordField pass = new JPasswordField();
  private JLabel jLabel1 = new JLabel();
  private JLabel jLabel2 = new JLabel();
  private JLabel jLabel3 = new JLabel();
  private JLabel jLabel4 = new JLabel();
  private JButton connect_button = new JButton();
  private javax.swing.tree.DefaultMutableTreeNode root =
    new javax.swing.tree.DefaultMutableTreeNode("root");
  private JTree struktur = new JTree(root);
  private JTable jTable1 = new JTable(5, 5);
  // Ende Variablen
  private Connection conn;

  public test(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 800;
    int frameHeight = 600;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    setLayout(null);

    datenbank.setBounds(585, 537, 105, 24);
    datenbank.setText("");
    cp.add(datenbank);
    user.setBounds(208, 537, 105, 24);
    user.setText("");
    cp.add(user);
    host.setBounds(40, 537, 121, 24);
    host.setText("");
    cp.add(host);
    jLabel1.setBounds(8, 540, 28, 16);
    jLabel1.setText("Host");
    jLabel1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel1);
    jLabel2.setBounds(174, 540, 29, 16);
    jLabel2.setText("User");
    jLabel2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel2);
    jLabel3.setBounds(327, 540, 55, 16);
    jLabel3.setText("Passwort");
    jLabel3.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel3);
    jLabel4.setBounds(513, 540, 66, 16);
    jLabel4.setText("Datenbank");
    jLabel4.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel4);
    connect_button.setBounds(704, 537, 75, 24);
    connect_button.setFont (new Font("MS Sans Serif", Font.PLAIN, 13));
    connect_button.setText("OK");
    cp.add(connect_button);
    connect_button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        connect_buttonActionPerformed(evt);
      }
    });

    pass.setBounds(392, 537, 105, 24);
    pass.setText("");
    cp.add(pass);
    struktur.setBounds(8, 8, 177, 521);
    root.add(new javax.swing.tree.DefaultMutableTreeNode("node"));
    cp.add(struktur);
    /*struktur.getSelectionModel().addTreeSelectionListener(
      new TreeSelectionListener()
      {
        public void valueChanged( TreeSelectionEvent e )
        {
          TreePath path = e.getNewLeadSelectionPath();
          System.out.println( path );
        }
      }
    );*/
    jTable1.setBounds(200, 8, 576, 520);
    cp.add(jTable1);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void connect_buttonActionPerformed(ActionEvent evt){
    try
    {
      Class.forName("com.mysql.jdbc.Driver");
      char[] password = pass.getPassword();
      try {
          conn = DriverManager.getConnection("jdbc:mysql://" + host.getText() +
                                              "/" + datenbank.getText() + "?" +
                                              "user=" + user.getText() +
                                              "&password=" + new String(password));
          System.out.println("SQL meldet: Verbindung erfolgreich");
          getDatenbank();
      } catch (SQLException ex) {
          // handle any errors
          System.out.println("SQLException: " + ex.getMessage());
          System.out.println("SQLState: " + ex.getSQLState());
          System.out.println("VendorError: " + ex.getErrorCode());
      }
    }
    catch(ClassNotFoundException e)
    {
      System.err.println(e.getMessage());
    }
  }

  // Ende Ereignisprozeduren

  public void getDatenbank(){
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    
    //Den Datenbankbaum erstellen
    DefaultMutableTreeNode root2 = new DefaultMutableTreeNode(datenbank.getText());
    try{
      Statement stmt = conn.createStatement();
      Statement stmt2 = conn.createStatement();
      String query = "SHOW tables FROM "+datenbank.getText();
      ResultSet rs = stmt.executeQuery( query );
      while ( rs.next() ){
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(rs.getString(1));
        root2.add( node );
        String query2 = "SHOW FIELDS FROM " + rs.getString(1);
        ResultSet rs2 = stmt2.executeQuery( query2 );
        while ( rs2.next() ){
          node.add( new DefaultMutableTreeNode(rs2.getString(1)));
        }
        rs2.close();
      }
      stmt2.close();
      rs.close();
      stmt.close();
    }
    catch ( SQLException e )
    {
      e.printStackTrace();
      return;
    }
    
//    struktur.setModel(root2);
    
    JTree tree = new JTree( root2 );
    frame.add( new JScrollPane( tree ) );
    frame.pack();
    frame.setVisible( true );
    tree.getSelectionModel().addTreeSelectionListener(
      new TreeSelectionListener()
      {
        public void valueChanged( TreeSelectionEvent e )
        {
          TreePath path = e.getNewLeadSelectionPath();
          System.out.println( path );
        }
      }
    );
  }

  public static void main(String[] args) {
    new test("test");
  }
}
 

lomtas

Mitglied
Der Link war sehr gut. Ich habe es glaube ich fast fertig. Wie mache ich jetzt aber das kleine letzte Stück?

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import com.mysql.jdbc.Driver;
import java.sql.*;
import java.lang.Class;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 23.02.2007
  * @author
  */

public class test extends JFrame {
  // Anfang Variablen
  private JTextField datenbank = new JTextField();
  private JTextField user = new JTextField();
  private JTextField host = new JTextField();
  private JPasswordField pass = new JPasswordField();
  private JLabel jLabel1 = new JLabel();
  private JLabel jLabel2 = new JLabel();
  private JLabel jLabel3 = new JLabel();
  private JLabel jLabel4 = new JLabel();
  private JButton connect_button = new JButton();
  private javax.swing.tree.DefaultMutableTreeNode root =
    new javax.swing.tree.DefaultMutableTreeNode("root");
  private DefaultTreeModel treeModel = new DefaultTreeModel(root);
  private JTree struktur = new JTree(treeModel);
  private JTable jTable1 = new JTable(5, 5);
  // Ende Variablen
  private Connection conn;

  public test(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 800;
    int frameHeight = 600;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    setLayout(null);

    datenbank.setBounds(585, 537, 105, 24);
    datenbank.setText("");
    cp.add(datenbank);
    user.setBounds(208, 537, 105, 24);
    user.setText("");
    cp.add(user);
    host.setBounds(40, 537, 121, 24);
    host.setText("");
    cp.add(host);
    jLabel1.setBounds(8, 540, 28, 16);
    jLabel1.setText("Host");
    jLabel1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel1);
    jLabel2.setBounds(174, 540, 29, 16);
    jLabel2.setText("User");
    jLabel2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel2);
    jLabel3.setBounds(327, 540, 55, 16);
    jLabel3.setText("Passwort");
    jLabel3.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel3);
    jLabel4.setBounds(513, 540, 66, 16);
    jLabel4.setText("Datenbank");
    jLabel4.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel4);
    connect_button.setBounds(704, 537, 75, 24);
    connect_button.setFont (new Font("MS Sans Serif", Font.PLAIN, 13));
    connect_button.setText("OK");
    cp.add(connect_button);
    connect_button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        connect_buttonActionPerformed(evt);
      }
    });

    pass.setBounds(392, 537, 105, 24);
    pass.setText("");
    cp.add(pass);
    struktur.setBounds(8, 8, 177, 521);
    treeModel.addTreeModelListener(new TreeModelListener(){
      public void treeNodesChanged(TreeModelEvent e){
      }
      public void treeNodesInserted(TreeModelEvent e) {
      }
      public void treeNodesRemoved(TreeModelEvent e) {
      }
      public void treeStructureChanged(TreeModelEvent e) {
      }
    });
    cp.add(struktur);
    jTable1.setBounds(200, 8, 576, 520);
    cp.add(jTable1);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void connect_buttonActionPerformed(ActionEvent evt){
    try
    {
      Class.forName("com.mysql.jdbc.Driver");
      char[] password = pass.getPassword();
      try {
          conn = DriverManager.getConnection("jdbc:mysql://" + host.getText() +
                                              "/" + datenbank.getText() + "?" +
                                              "user=" + user.getText() +
                                              "&password=" + new String(password));
          System.out.println("SQL meldet: Verbindung erfolgreich");
          getDatenbank();
      } catch (SQLException ex) {
          // handle any errors
          System.out.println("SQLException: " + ex.getMessage());
          System.out.println("SQLState: " + ex.getSQLState());
          System.out.println("VendorError: " + ex.getErrorCode());
      }
    }
    catch(ClassNotFoundException e)
    {
      System.err.println(e.getMessage());
    }
  }

  // Ende Ereignisprozeduren

  public void getDatenbank(){
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    
    //Den Datenbankbaum erstellen
    DefaultMutableTreeNode root2 = new DefaultMutableTreeNode(datenbank.getText());
    try{
      Statement stmt = conn.createStatement();
      Statement stmt2 = conn.createStatement();
      String query = "SHOW tables FROM "+datenbank.getText();
      ResultSet rs = stmt.executeQuery( query );
      while ( rs.next() ){
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(rs.getString(1));
        root2.add( node );
        String query2 = "SHOW FIELDS FROM " + rs.getString(1);
        ResultSet rs2 = stmt2.executeQuery( query2 );
        while ( rs2.next() ){
          node.add( new DefaultMutableTreeNode(rs2.getString(1)));
        }
        rs2.close();
      }
      stmt2.close();
      rs.close();
      stmt.close();
    }
    catch ( SQLException er )
    {
      er.printStackTrace();
      return;
    }
    
//    struktur.setModel(root2);
    
    JTree tree = new JTree( root2 );
    frame.add( new JScrollPane( tree ) );
    frame.pack();
    frame.setVisible( true );
    tree.getSelectionModel().addTreeSelectionListener(
      new TreeSelectionListener()
      {
        public void valueChanged( TreeSelectionEvent e )
        {
          TreePath path = e.getNewLeadSelectionPath();
          System.out.println( path );
        }
      }
    );
  }

  public static void main(String[] args) {
    new test("test");
  }
}

Wahrscheinlich muss irgendwas in TreeNodesChanged? Wäre dankbar für weitere Tipps.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
F Jtree kürzt Namen auf ... Java Basics - Anfänger-Themen 4
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
H Best Practice Wo wird der rootNode eines JTree gespeichert... Java Basics - Anfänger-Themen 0
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
R JTree bewegen Java Basics - Anfänger-Themen 6
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
G bestimmte dateiendungen in jtree rausfiltern Java Basics - Anfänger-Themen 7
P JTree aus txt Java Basics - Anfänger-Themen 8
M Warum wird mein Icon bei den JTree Nodes nicht angezeigt? Java Basics - Anfänger-Themen 7
JStickman JTree, JScrollPane, Liste mit graphischer Suchleiste - Dateimanager Java Basics - Anfänger-Themen 10
M JTree + JTab Java Basics - Anfänger-Themen 3
T JTree füllen Java Basics - Anfänger-Themen 3
B JTree knoten wird nicht übernommen Java Basics - Anfänger-Themen 4
S JTree Hilfe Java Basics - Anfänger-Themen 6
P Jtree MouseListener und NoCollapse Java Basics - Anfänger-Themen 2
M JTree ohne root anzeigen Java Basics - Anfänger-Themen 5
F JTree mit JSpinner Java Basics - Anfänger-Themen 2
I Liste von Dateien anzeigen/JTree Java Basics - Anfänger-Themen 4
G Zugriff auf JTree-Objekt Java Basics - Anfänger-Themen 2
K Problem: JTree mit integrierten JCheckboxen Java Basics - Anfänger-Themen 5
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
D JTree ich dreh durch :D Java Basics - Anfänger-Themen 2
T JTree root setzten Java Basics - Anfänger-Themen 13
G xml Datei in JTree Java Basics - Anfänger-Themen 2
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
R Problem mit JTree und JTable Java Basics - Anfänger-Themen 16
A JTree drucken Java Basics - Anfänger-Themen 2
M JTree und ein Button mit ActionListener Java Basics - Anfänger-Themen 3
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
G Filesystem in JTree anzeigen Java Basics - Anfänger-Themen 4
A Jtree Aufbau Java Basics - Anfänger-Themen 5
G JTree ilstener Java Basics - Anfänger-Themen 3
G JTree Java Basics - Anfänger-Themen 2
G Erstellten JTree aus einer XML-Datei akktualisieren Java Basics - Anfänger-Themen 11
S jTree initialisierung Java Basics - Anfänger-Themen 4
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
J ArrayListen mit Name und Vater an JTree übergeben Java Basics - Anfänger-Themen 3
G aussehen vom jtree wiederherstellen Java Basics - Anfänger-Themen 3
P JTree mit mehreren Wurzeln Java Basics - Anfänger-Themen 2
G Umbenennen im JTree Java Basics - Anfänger-Themen 5
G rechter Mausklick im JTree Java Basics - Anfänger-Themen 2
G Bilder im jTree Java Basics - Anfänger-Themen 3
G jTree Pfad merken Java Basics - Anfänger-Themen 2
S JTree aktualisieren Java Basics - Anfänger-Themen 4
M JTree aktualisieren Java Basics - Anfänger-Themen 3
E JTree - Element suchen Java Basics - Anfänger-Themen 5
G JTree Problem. Java Basics - Anfänger-Themen 5
G JTree Java Basics - Anfänger-Themen 2
E JTree - Verzeichnisbaum Java Basics - Anfänger-Themen 3
G JTree Frage Java Basics - Anfänger-Themen 5
G Ebene von JTree ermitteln? Java Basics - Anfänger-Themen 6
G Icons für JTree skalieren? Java Basics - Anfänger-Themen 3
G Standard JTree ausblenden? Java Basics - Anfänger-Themen 5
B JTree mit Verzeichnissen füllen Java Basics - Anfänger-Themen 17
G Object vor reload von JTree merken und danach wieder setzen? Java Basics - Anfänger-Themen 5
P Wert aus JTree in ComboBox setzen? Java Basics - Anfänger-Themen 2
G Problem mit Refresh von JTree Java Basics - Anfänger-Themen 11
lomtas Scrollbalken für JTree Java Basics - Anfänger-Themen 3
K JTree verlinken Java Basics - Anfänger-Themen 3
T ArrayList mit Dateien in die richtigen Ordner eines JTree Java Basics - Anfänger-Themen 16
K JTree aus DB rekursiv füllen Java Basics - Anfänger-Themen 12
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
G JTree vollständigen pfad anzeigen Java Basics - Anfänger-Themen 11
R JTree aus einer ArrayList Java Basics - Anfänger-Themen 9
J JTree Bilder Java Basics - Anfänger-Themen 2
G JTree.TreeListener Java Basics - Anfänger-Themen 12
S JTree valueChanged() Ausgabe leider immer mit Pfadangabe! Java Basics - Anfänger-Themen 4
S JTree aktualisieren bzw. komplett neu aufbauen Java Basics - Anfänger-Themen 6
G Scrollen im JTree Java Basics - Anfänger-Themen 17
G Hintergrundsfarbe für JTree Java Basics - Anfänger-Themen 15
F JTree-Knoten (DefaultMutableTreeNode) formatieren ? Java Basics - Anfänger-Themen 3
Y JTree: ein Knoten als Objekt Java Basics - Anfänger-Themen 2
J JTable / JTree: Unsichtbare Elemente Java Basics - Anfänger-Themen 4
G JTree Explorer Problem mit listRoots() Java Basics - Anfänger-Themen 9
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2
V JSON-Objs aus JSON-Obj filtern und löschen (Manipulation ohne Kenntnis der vollst. Struktur) Java Basics - Anfänger-Themen 12
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
D Verbesserungsvorschläge zur Struktur einer Client Server Desktop Chat App Java Basics - Anfänger-Themen 24
B Collections Streams - Hilfestellung bei komplexer Struktur Java Basics - Anfänger-Themen 9
M Struktur eines Fotobuches Java Basics - Anfänger-Themen 6
N Struktur zerstört Java Basics - Anfänger-Themen 5
T "Einkauf" & if else Struktur Java Basics - Anfänger-Themen 7
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
B MVC Struktur mit mehreren Szenen - wer schaut mal bitte drüber? Java Basics - Anfänger-Themen 2
H Empfohlene Projekt-Struktur und mehr ... Java Basics - Anfänger-Themen 5
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
P Layer Struktur -> File- Verfügbarkeit Java Basics - Anfänger-Themen 0
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
B Grundsätzliche Klassen-Struktur/Stil Java Basics - Anfänger-Themen 12
F OOP Objekterzeugung in IF-Struktur Java Basics - Anfänger-Themen 2
R BlueJ - Hilfe bei for-Struktur Java Basics - Anfänger-Themen 11
K Bibliothek per "Struktur" anlegen Java Basics - Anfänger-Themen 5
S Ordner / Package Struktur bei größerem Projekt? Java Basics - Anfänger-Themen 8
D Welche API für komplexe XML-Struktur? Java Basics - Anfänger-Themen 25

Ähnliche Java Themen

Neue Themen


Oben