Frame mit mehreren areas

mariusbopp

Bekanntes Mitglied
moin ich ma wieder...

hab ein problem bzw ne frage und zwar hab ich einen tree ... jetzt möchte ich aber das rechts von dem tree ein bereich ist in dem der ordnerinhalt angezeigt wird z.b ich klicke links im tree auf eigene dateien und bekomme den inhalt des ordners angezeigt(wie bei windows)

ich hab schon mehreres versucht aber ich bekomme kein 2tes pannel da rein an welcher stelle muss es denn rein ?? und dann brauch ich ja auch einen layoutmanager oder?

Java:
import java.io.*;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
import javax.swing.tree.*;

public class FileTreeTest extends JTree{
  public static void main( String[] args ){
    JFrame frame = new JFrame("tree");
    frame.getContentPane().add( new JScrollPane( new FileTreeTest() ) );
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.pack();
    frame.setLocationRelativeTo( null );
    frame.setVisible( true );
  }

  private static FileSystemView SYSTEM = FileSystemView.getFileSystemView();

  public FileTreeTest(){
    setModel( new FileTreeModel() );
    setCellRenderer( new FileTreeCellRenderer() );
  }

  private class FileTreeCellRenderer extends DefaultTreeCellRenderer{
    public FileTreeCellRenderer(){
     
    }

    public Component getTreeCellRendererComponent( JTree tree, Object value, boolean sel, boolean exp, boolean leaf, int row, boolean focus ){
      super.getTreeCellRendererComponent( tree, value, sel, exp, leaf, row, focus );
         
      File file = (File)value;
     
      setIcon( SYSTEM.getSystemIcon( file ) );
      setText( SYSTEM.getSystemDisplayName( file ));
     
      return this;
    }
  }

  private class FileTreeModel implements TreeModel {
    public FileTreeModel() {

    }

    public Object getRoot() {
      return SYSTEM.getHomeDirectory();   
    }

    public int getChildCount(Object parent) {
      return SYSTEM.getFiles( (File) parent, true).
          length;
    }

    public boolean isLeaf(Object node) {
      return ( (File) node).isFile();
    }

    public void addTreeModelListener(TreeModelListener l) {
    }

    public void removeTreeModelListener(TreeModelListener l) {
    }

    public Object getChild(Object parent, int index) {
      return SYSTEM.getFiles( (File) parent, true)[ index];
    }

    public int getIndexOfChild(Object parent, Object child) {
      File[] files = SYSTEM.getFiles( (File) parent, true);

      for (int i = 0; i < files.length; i++)
        if (files[i] == child)
          return i;

      return -1;
    }

    public void valueForPathChanged(TreePath path, Object newValue) {
    }
  }
}
 
JA du brauchst einen LayoutMAnager, hier kann ich dir wohl das BorderLayout empfehlen. Wenn du einfach danach suchst wirt du genug Tutorials finden
 
klappt nicht ganz 🙁 mein frame überschreibt das immer...

Java:
public static void main( String[] args ){
	  JFrame frame = new JFrame("tree");
	  JPanel content = new JPanel();
      content.setLayout(new BorderLayout());  
  	 frame.getContentPane().add( new JScrollPane( new FileTreeTest() ) );
	 frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	 frame.pack();
	 frame.setLocationRelativeTo( null );
	 frame.setVisible( true );
	  }

hab auch shcon versucht einfach ein 2ten pannel da rein zu machen aber da passiert auch nix...
ich hab dann
Java:
JPanel content2= new JPanel;
und hab dann unten
Java:
frame.getContent2Pane.add(new JScrollpane()));

aber das will nicht?! was mach ich falsch?
 
richtig den hab ich erstmal weg gelassen, hab gedacht erstmal n feld rechts und dann n feld links vom fenster... und wenn ich das hinbekommen hab guck ich weiter
 
ich hab das ganze mal gebastelt...
am ende soll es so sein
unbenanntcvk.png

😱

wie würdest du das denn am besten machen?( ganz am schluss soll oberhalt der beiden fenster noch etwas hinzukommen (textfelf + button))

edit: link vergessen^^

Uploaded with ImageShack.us
 
Zuletzt bearbeitet:
So in etwa:

Java:
public static void main( String[] args )
{
	JFrame frame = new JFrame("tree");
	
	Box mainBox = Box.createVerticalBox();
	frame.add(mainBox);

	Box headBox = Box.createHorizontalBox();
	mainBox.add(headBox);

	headBox.add(new JLabel("Label"));
	headBox.add(new JButton("Button"));

	JPanel bodyPanel = new JPanel(new CardLayout());
	mainBox.add(bodyPanel);

	JTree tree = new JTree();
	//JTree einrichten...

	JPanel folderContentPane = new FolderContentPane(); //Um den Ordnerinhalt anzuzeigen.
	
	JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tree, folderContentPane);
	bodyPanel.add(splitPane, "SplitPane");

	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.pack();
	frame.setLocationRelativeTo(null);
	frame.setVisible(true);
}

(VHidT)
 
ich hab den tree ja in mehrere unterklassen gesplittet... die kann ich ja nicht einfach da einfügen

und wenn ich das dann mit add. mache sieht es wieder genau so aus wie vorher
Java:
import java.io.*;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
import javax.swing.tree.*;

public class test extends JTree{
	public static void main( String[] args )
	{
	    JFrame frame = new JFrame("tree");
	    
	    Box mainBox = Box.createVerticalBox();
	    frame.add(mainBox);
	 
	    Box headBox = Box.createHorizontalBox();
	    mainBox.add(headBox);
	 
	    headBox.add(new JLabel("Label"));
	    headBox.add(new JButton("Button"));
	 
	    JPanel bodyPanel = new JPanel(new CardLayout());
	    mainBox.add(bodyPanel);
	 
	    JTree tree = new JTree();
	    
	  
	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    frame.getContentPane().add( new JScrollPane( new FileTreeTest() ) );
	    frame.pack();
	    frame.setLocationRelativeTo(null);
	    frame.setVisible(true);
	}

  private static FileSystemView SYSTEM = FileSystemView.getFileSystemView();

  public test(){
    setModel( new FileTreeModel() );
    setCellRenderer( new FileTreeCellRenderer() );
  }

  private class FileTreeCellRenderer extends DefaultTreeCellRenderer{
    public FileTreeCellRenderer(){
     
    }

    public Component getTreeCellRendererComponent( JTree tree, Object value, boolean sel, boolean exp, boolean leaf, int row, boolean focus ){
      super.getTreeCellRendererComponent( tree, value, sel, exp, leaf, row, focus );
         
      File file = (File)value;
     
      setIcon( SYSTEM.getSystemIcon( file ) );
      setText( SYSTEM.getSystemDisplayName( file ));
     
      return this;
    }
  }

  private class FileTreeModel implements TreeModel {
    public FileTreeModel() {

    }

    public Object getRoot() {
      return SYSTEM.getHomeDirectory(); //<---   
    }

    public int getChildCount(Object parent) {
      return SYSTEM.getFiles( (File) parent, true).
          length;
    }

    public boolean isLeaf(Object node) {
      return ( (File) node).isFile();
    }

    public void addTreeModelListener(TreeModelListener l) {
    }

    public void removeTreeModelListener(TreeModelListener l) {
    }

    public Object getChild(Object parent, int index) {
      return SYSTEM.getFiles( (File) parent, true)[ index];
    }

    public int getIndexOfChild(Object parent, Object child) {
      File[] files = SYSTEM.getFiles( (File) parent, true);

      for (int i = 0; i < files.length; i++)
        if (files[i] == child)
          return i;

      return -1;
    }

    public void valueForPathChanged(TreePath path, Object newValue) {
    }
  }
}

 
okay ich hab es jetzt mal besser hinbekommen hab es mit den boxen gemacht so wie "Volvagia"
klappt auch nur das alignement bekomme ich noch nicht so hin hier ist vertical und horizontal...
center nimmt er mir leider nicht... wie mach ich das?
Java:
	public static void main( String[] args )
	{
	    JFrame frame = new JFrame("DatenTree");
	    
	    Box mainBox = Box.createVerticalBox();
	    frame.add(mainBox);
	 
	    Box headBox = Box.createHorizontalBox();
	    mainBox.add(headBox);
	
	    mainBox.add( new JScrollPane( new FileTreeTest() ) ); //<---- tree
	    
	    headBox.add(new JLabel("blablablabla"));
	    headBox.add(new JButton("Button"));
	 
	    JPanel bodyPanel = new JPanel(new CardLayout());
	    mainBox.add(bodyPanel);
	 
	     	  
	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    frame.pack();
	    frame.setLocationRelativeTo(null);
	    frame.setVisible(true);
	}
 
Am Besten, indem du ein Glue der Box (Vertikal oder Horizontal, keinen allgemeinen) dort addest, wo die Daten nicht sein sollen. (Also für Rechtsbündigkeit links einfügen und umgekehrt.)
 

Neue Themen


Zurück
Oben