einfahrbares Menü

MScalli

Erfahrenes Mitglied
Hi Leutz.
Mal eine Frage.
Ich bin zur Zeit an einem Programm und hab bisschen Platzprobleme.
Es werden hier immer kleinere Masken(JInternalFrames) in einem JDesktopFrame aufgerufen.
Ich habe auf der linken Seite eine Menüführung. Diese möchte ich gerne "einfahren".. d.h. sie soll wie ne schublade ins nirvana verschwinden. ;)
Ich hoffe Ihr wisst was ich meine.. Ich habe dies schon öfter gesehen das auf der linken Seite ne art Karteikarte ist und beim drüberfahren vergrössert sich das menü(wird nach rechts geöffnet).

Jetzt meine Frage.. geht das in Java.. bzw. gibt es da schon irgendwas.

die Location von width ins negative setzten geht zwar schon aber ich denke das Java bestimmt schon irgendeine Componente hat die das bereits(besser) kann.

Schon mal thx an alle Helfer

gruss
MScalli
 
Hallo,

ich weiß nicht ganz was du meinst. Hättest du vielleicht nen Screenshot oder einen Link?

MFG

Sascha
 
finde jetzt gerade gar nichts.. aber ich kanns erklären ;)

habe ein Fenster im Fenster
das innere Fenster(menu) ist 200 breit 800 hoch.
setLocation(0,0), nun ist das menü in der linken ecke.
jetzt kann ich mit nem Zähler die Location ins negative setzten und das Fenster verschwindet nach links

Code:
for(int i =0; i > -200; i--){
    menu.setLocation(i,0);
}

sowas hab ich schon bei Web-Seiten gesehen..
also der obere code funktioniert einwandfrei, aber das geht vieeellll zu schnell..
langsam zählen(wait() oder so) ist bei java ja ne sache die ich einfach nicht in griff bekomme..
deswegen frage ich obs sowas schon gibt..
 
Nein, gibt es leider nicht. Du könntest auch einfach ein Thread.sleep(100) oder so machen.

MFG

Sascha
 
wie gesagt, das will bei mir nicht so wirklich..
also ich rufe die Methode menuEinfahren auf und übergebe den desktop(das JDesktopPane) denn den muss ich ja jedes mal neu zeichnen.
aber das will so nicht, auch nur das JInternalFrame immer neu zu zeichnen geht nicht.
Irgendwas mach ich mit dem neu zeichnen falsch.. Und nur repaint() geht hier nicht.

Code:
  public static void menuEinfahren(JDesktopPane desktop){
	  for(int i =0; i > -200; i--){
		  //
		  frame.setLocation(i,0);
		  try {
			  Thread.sleep(100);
		  } catch (InterruptedException e) {
			  e.printStackTrace();
		  }
		  desktop.repaint();
	  } 
  }
 
Wäre es möglich, dass du mir mal den kompletten Code zukommen lässt? Dann schaue ich mir das mal an.

MFG

Sascha
 
ist leider nicht lauffähig da ich externe Klassen benutze.. aber auf ein minimum zusammengefasst sieht es so aus! das erstellen des menüs habe ich zum testen auf Test gelegt und das einfahren auf menu..

Klasse WinOnWin
Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.border.EtchedBorder;

public class WinOnWin implements ActionListener
{
	public JDesktopPane desktop;
	JMenuBar menuleiste;
	JFrame f;

	public WinOnWin(){
		desktop = new JDesktopPane();

	    f = new JFrame();
	    
	    f.setTitle("Test");
	    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	    
	    f.add( desktop );
	    f.setSize( 1100, 800 );
	    desktop.setBackground(new Color(200,200,200));
	    getMenuLeiste();
	    
	    f.setJMenuBar(menuleiste);
	    f.setVisible( true );
	}

public void getMenuLeiste()
{
  	menuleiste = new JMenuBar();
  	JMenu ebook = new JMenu      				("EBook");
  	  JMenuItem verwaltung = new JMenuItem    				("Menü");
  	  verwaltung.setActionCommand							("menu");
  	  JMenuItem test = new JMenuItem						("test");
  	  test.setActionCommand									("test");
  	  verwaltung.addActionListener(this);
  	  test.addActionListener(this);
  	  ebook.add(verwaltung);
  	  ebook.addSeparator();
  	  ebook.add(test);

  	  menuleiste.setBorder(new EtchedBorder() );
  	  menuleiste.setBackground(new Color(211,211,211));
  	  menuleiste.add(ebook);  
}

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

@Override
public void actionPerformed(ActionEvent e) {
	String cmd = e.getActionCommand();
	System.out.println(cmd);
	if(cmd.equals("test")){
		int begin_width 	= desktop.getWidth() - Test.getWidthFrame();
		int begin_height 	= desktop.getHeight() - Test.getHeightFrame();
		new Test("Test", desktop, begin_width, begin_height); 
		Test.getInternalFrame();
	}
	if(cmd.equals("menu")){
		Test.menuEinfahren(desktop);
	}
}

}

Klasse Test(Das JInternalFrame)
Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.plaf.basic.BasicInternalFrameUI;

import org.jdesktop.swingx.JXTaskPane;
import org.jdesktop.swingx.JXTaskPaneContainer;
import org.jdesktop.swingx.border.DropShadowBorder;

public class Test{
  private static final long serialVersionUID = 3001190420235484550L;
  static JInternalFrame frame;
  static int frameWidth = 200;
  static int frameHeight = 748;
  public Test(String title, Container desktop, int _x, int _y) {
    // Frame-Initialisierung
    frame = new JInternalFrame();

    frame.setFrameIcon(null);
    frame.setClosable(true);
    frame.setMaximizable(true);
    frame.setResizable(true);
    frame.setTitle("Menü Explorer");
    frame.setIconifiable(true);
    frame.setSize(frameWidth, frameHeight);
    frame.setLocation(0,0); 
    frame.setBorder(BorderFactory.createLineBorder(new Color(111,111,111), 2));
// ******************************************************************************************************************************
  
    //frame = new JInternalFrame();
    BasicInternalFrameUI ui = (BasicInternalFrameUI) frame.getUI();
    ui.setNorthPane(null);
    
	 // a container to put all JXTaskPane together
	 JXTaskPaneContainer taskPaneContainer = new JXTaskPaneContainer();
	 //taskPaneContainer.setBackground(Color.BLUE);
	 
    DropShadowBorder dropShadow = new DropShadowBorder(Color.BLACK, 10, 1, 5, false, true, true, true);
    taskPaneContainer.setBorder(dropShadow);
    
	 // create a first taskPane with common actions
	 JXTaskPane actionPane = new JXTaskPane();
	 actionPane.setTitle("Feld 1                    ");
	 actionPane.setSpecial(true);
	 
	 // add this taskPane to the taskPaneContainer
	 actionPane.add(createTaskPaneAction("test1")); 
	 actionPane.add(createTaskPaneAction("test2")); 
	 actionPane.add(createTaskPaneAction("test3")); 
	 actionPane.add(createTaskPaneAction("test4")); 
	 actionPane.add(createTaskPaneAction("test5")); 
	 taskPaneContainer.add(actionPane);
	 
	 frame.add(taskPaneContainer);
// ******************************************************************************************************************************
    frame.setResizable(false);
    frame.setVisible(true);
    desktop.add(frame);
  }
	private Action createTaskPaneAction(String name)
	  {
	    return new AbstractAction(name)
	    {
	      public void actionPerformed(ActionEvent e)
	      {
	         System.out.println(e.getActionCommand());
	      }
	    };
	  }
  public static JInternalFrame getInternalFrame(){
    return frame;
  }
  public static int getHeightFrame(){
    return frameHeight;
  }
  public static int getWidthFrame(){
    return frameWidth;
  }
  /*
   * um das hier gehts!! 
   */
  public static void menuEinfahren(JDesktopPane desktop){
	  for(int i =0; i > -200; i--){
		  //
		  frame.setLocation(i,0);
		  try {
			  Thread.sleep(50);
			  System.out.println(i);
		  } catch (InterruptedException e) {
			  e.printStackTrace();
		  }
		  desktop.repaint();
	  } 
  }
}// ENDE
 
Schau mal hier
Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.plaf.basic.BasicInternalFrameUI;

public class Test
{
  private static final long serialVersionUID = 3001190420235484550L;
  static JInternalFrame     frame;
  static int                frameWidth       = 200;
  static int                frameHeight      = 748;

  public Test(String title, Container desktop, int _x, int _y)
  {
    // Frame-Initialisierung
    frame = new JInternalFrame();

    frame.setFrameIcon(null);
    frame.setClosable(true);
    frame.setMaximizable(true);
    frame.setResizable(true);
    frame.setTitle("Menü Explorer");
    frame.setIconifiable(true);
    frame.setSize(frameWidth, frameHeight);
    frame.setLocation(0, 0);
    frame.setBorder(BorderFactory.createLineBorder(new Color(111, 111, 111), 2));
    // ******************************************************************************************************************************

    // frame = new JInternalFrame();
    BasicInternalFrameUI ui = (BasicInternalFrameUI) frame.getUI();
    ui.setNorthPane(null);

    // a container to put all JXTaskPane together

    // ******************************************************************************************************************************
    frame.setResizable(false);
    frame.setVisible(true);
    desktop.add(frame);
  }

  private Action createTaskPaneAction(String name)
  {
    return new AbstractAction(name)
    {
      public void actionPerformed(ActionEvent e)
      {
        System.out.println(e.getActionCommand());
      }
    };
  }

  public static JInternalFrame getInternalFrame()
  {
    return frame;
  }

  public static int getHeightFrame()
  {
    return frameHeight;
  }

  public static int getWidthFrame()
  {
    return frameWidth;
  }

  /*
   * um das hier gehts!!
   */
  public static void menuEinfahren(final JDesktopPane desktop)
  {
    ExecutorService service = Executors.newSingleThreadExecutor();
    service.execute(new Runnable()
    {

      public void run()
      {
        for (int i = 0; i > -200; i--)
        {
          //
          frame.setLocation(i, 0);
          try
          {
            Thread.sleep(5);
          }
          catch (InterruptedException e)
          {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          desktop.repaint();
        }
      }

    });

  }
}// ENDE

MFG

Sascha
 
Zurück