# Datenbank als Baumhierarchie



## tomier (17. Jul 2012)

Liebe Forumnutzer,

Ich bin neu hier und will mich dem Java programmieren näher widmen. Und somit noch Anfänger.

Ich will einem Freund für seine kleine Firma eine Angebotserstellungssoftware machen.

Die Daten sind in einer MySQL-Datenbank gespeichert.

Das Fenster soll so aufgebaut sein, dass man links wie beim Windows Explorer einen Menübaum mit 3 Ebenen hat.
Nach ca. der folgenden Struktur:

```
Ebene 1 
   Ebene 2
      Ebene 3
      Ebene 3
      Ebene 3
   Ebene 2
      Ebene 3
   Ebene 2
Ebene 1
   Ebene 2
```
Im rechten Teil des Fenster ist die Angebotsübersicht.

Man soll per Doppelklick oder Drag-and Drop (was weniger kompliziert ist sonst beides) die jeweiligen Artikel (aber NUR die aus der 3.Ebene) hineinziehen können.

dabei sollen ein paar der spalten angezeigt werden, welche in der datenbank des materials sind aber nicht alle. die anzahl bzw. menge des jeweiligen material soll man manuell eingeben können.

am unteren ende sollen die gesamtkosten angezeigt werden, der verkaufspreis ist pro stück im vorhinein vordefiniert, arbeitszeit findet sich als position in der datenbank.

aus der Datenbank habe ich schon die Daten auslesen können und nach folgendem baum auslesen können.

Wisst ihr vielleicht wie man Methoden bzw. ganze Klassen gestalten sollte in diesem Zusammenhang?
Das ich die Datenbankausgaben als Art GET-Funktion verwenden kann?



```
import java.sql.*;
import java.io.IOException;


public class material_database {

	/**
	 * @param args
	 */
	private String tablename = "material";
	public Statement stmt1;
	public Statement stmt2;
	public Statement stmt3;
	private ResultSet ResultMaterialset;
	private String database="//localhost/andrease";
	private String database_user="root";
	private String database_password="";
	private String attribut_ebene1="Materialart";
	private String attribut_ebene2="Artikelbezeichnung";
	private String attribut_ebene3="Abmessungen";
	
	public String[] ebene1;
	public String[] ebene2;
	public String[] ebene3;
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		material_database test=new material_database();
		
	}
	
	
		public material_database(){
			
			public String [] getTree(String [] test1)
			{
			try {
				
				Class.forName("com.mysql.jdbc.Driver").newInstance();
				Connection con = DriverManager.getConnection(
						"jdbc:mysql:"+database,database_user,database_password);
				
				
				con.setReadOnly(true);
				stmt1 = con.createStatement();
				stmt2 = con.createStatement();
				stmt3 = con.createStatement();
				
				//boolean update = stmt.execute("INSERT INTO "+tablename+" (Vorname,Nachname,Hauptwohnadresse) VALUES ('"+eingabe1+"','"+eingabe2+"','"+eingabe2+"')");
				
				 
				ResultMaterialset = stmt1.executeQuery("Select "+attribut_ebene1+" from "+tablename+" GROUP BY "+attribut_ebene1);
			
				int i=0;
				while(ResultMaterialset.next()){
					
					System.out.println(ResultMaterialset.getString(1));
					test1=new String[9];
					test1[i]=ResultMaterialset.getString(1);
					ResultSet ResultMaterialset2 = stmt2.executeQuery("Select "+attribut_ebene2+" from "+tablename+" WHERE "+attribut_ebene1+"='"+ResultMaterialset.getString(1)+"' GROUP BY  "+attribut_ebene2);
						while(ResultMaterialset2.next()){
						
					System.out.println(ResultMaterialset2.getString(1));
						ResultSet ResultMaterialset3 = stmt3.executeQuery("Select "+attribut_ebene3+" from "+tablename+" WHERE "+attribut_ebene1+"='"+ResultMaterialset.getString(1)+"' AND "+attribut_ebene2+"='"+ResultMaterialset2.getString(1)+"'");
							while(ResultMaterialset3.next()){
					
								System.out.println(ResultMaterialset3.getString(1));
							
							}
							ResultMaterialset3.close();
						}
						ResultMaterialset2.close();
					i++;
				}
				
				ResultMaterialset.close();
				stmt1.close();
				stmt2.close();
				stmt3.close();
				con.close();
			}
			catch(Exception e) {
				System.out.println("Fehler"+e);
			}
					
			return test1[1];
		} //end of string method
		
		} //End of constructor material_database
			
	
	

}
```


Ein Beispiel-Explorer der mir vom Aufbau genau so gefallen würde:

```
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.*;
 
public class Explorer extends JFrame {
 
    private JPanel contentPane;
    private JTable table;
    private DefaultTableModel tableModel=new DefaultTableModel();
    private Vector<String> tableColumns=new Vector<String>();
    private JPopupMenu popupDatei = new JPopupMenu();
    private JPopupMenu popupBackground = new JPopupMenu();
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Explorer frame = new Explorer();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
 
    /**
     * Create the frame.
     */
    public Explorer() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 340);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        tableColumns.add("Dateiname");
        
        DefaultMutableTreeNode root=new DefaultMutableTreeNode();
        root.setUserObject("Material");
        File[] roots=File.listRoots();    
        
        for(File f:roots)
        {
        	
        	
        	
            root.add(new DefaultMutableTreeNode(f));
        }
        
        
       /* for(File f:roots)
        {
            root.add(new DefaultMutableTreeNode(f));
        }*/
        DefaultTreeModel treeModel=new DefaultTreeModel(root);
        
        JScrollPane scrollPaneTree = new JScrollPane();
        JTree tree = new JTree(treeModel);  
        tree.addTreeSelectionListener(new TreeSelectionListener() {
            
            public void valueChanged(TreeSelectionEvent e) 
            {
                DefaultMutableTreeNode node=(DefaultMutableTreeNode)e.getPath().getLastPathComponent();
                if(node.isLeaf())
                {
                    Vector<Vector<File>> tableData=new Vector<Vector<File>>();
                    File selectedFile=(File) node.getUserObject();
                    File[] files=selectedFile.listFiles();
                    for(File f:files)
                    {
                        Vector<File> v=new Vector<File>();
                        v.add(f);
                        tableData.add(v);
                        if(f.isDirectory())
                        {
                            node.add(new DefaultMutableTreeNode(f));
                        }
                    }
                    
                    tableModel.setDataVector(tableData,tableColumns);
                }
            }
        });
        scrollPaneTree.setViewportView(tree);
        
        JScrollPane scrollPaneTable = new JScrollPane();
        
        table = new JTable(tableModel);
        table.setFillsViewportHeight(true);
        scrollPaneTable.setViewportView(table);
        
 
        
        JMenuItem itemNeu = new JMenuItem("Neue Datei");
        itemNeu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) 
            {
                System.out.println("Neue Datei");
            }
        });
        popupBackground.add(itemNeu);
        
        JSplitPane splitPane = new JSplitPane();
        splitPane.setResizeWeight(0.3);
        splitPane.setPreferredSize(new Dimension(400, 300));
        splitPane.setLeftComponent(scrollPaneTree);
        splitPane.setRightComponent(scrollPaneTable);
        contentPane.add(splitPane, BorderLayout.NORTH);
        
        JMenuItem itemOefnnen = new JMenuItem("\u00D6ffnen");
        popupDatei.add(itemOefnnen);
        itemOefnnen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) 
            {
                File f=(File) table.getValueAt(table.getSelectedRow(), 0);
                try {
                    Desktop.getDesktop().open(f);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        
        
        table.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) 
            {
                int selection=table.rowAtPoint(e.getPoint());
                //table.getSelectionModel().setSelectionInterval(selection, selection);
                if (e.isPopupTrigger()) {
                    showMenu(e);
                }
            }
            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    showMenu(e);
                }
            }
            private void showMenu(MouseEvent e) {
                int row=table.rowAtPoint(e.getPoint());
                if(row!=-1 && row==table.getSelectedRow())  //-1 -> No row selected
                {
                    popupDatei.show(table, e.getX(), e.getY());
                }
                else
                {
                    popupBackground.show(table, e.getX(), e.getY());
                }
                
            }
        });     
    }
}
```

Vielen Dank für eure Hilfe.


----------



## mla.rue (23. Jul 2012)

Ich vermute mal du meinst sowa ?


----------



## Evil-Devil (24. Jul 2012)

[edit]Hier stand Mist - löschen -.- ![/edit]


----------

