kostenloser Webspace werbefrei: lima-city


ActionListener von Panel1 auf Panel2 sterten

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    nacave

    nacave hat kostenlosen Webspace.

    Hi, also ich hätt mal folgendes problem:

    Ich habe 2 Panels: Panel1 und Panel2 und ich habe einen Button (b) mit einem ActionListener, der ein JInternalFrame ausführen soll.
    Der Button liegt auf Panel1, aber das JInternalFrame soll auf Panel2 erscheinen.

    Wie kann ich das machen?

    Thx schonmal

    Edit: Hat sich erledigt, habs mal mit JDesktopPane gemacht...

    btw, wie kann ich in diesem JInternalFrame über eine JMenuBar nur das InternalFrame schliessen und nicht das ganze programm?

    Thx

    Beitrag zuletzt geändert: 14.7.2009 16:18:42 von nacave
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c****s

    Wenn dein JInternalFrame zum Beispiel "mif" heißt, dann rufst du zum schließen einfach mif.setVisible (false) auf.
    Wenn du den JInternalFrame danach nicht mehr brauchst, kannst du ihn auch mit mif.dispose () wegschmeißen.

    Das heißt, du übergibst dem entsprechenden JMenuItem einen ActionListener, der dann auf derjenigen JInternalFrame-Instanz, die geschlossen werden soll, die setVisible-Methode aufruft.

    Edit: Ich hab dir mal n Beispiel gebastelt. Mit "add frame" Frames hinzufügen (Obacht, die landen alle auf 0/0, also erstmal einen wegschieben, bevor man einen neuen macht) und mit "close frame" die Frames wieder wegmachen:

    package de.limacity.census.internaltutorial;
    
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MainFrame extends JFrame
    {
    	private int nextNumber = 0;
    	private JMenu menuFrames;
    	
    	public static void main (String [] args) { new MainFrame ().setVisible (true); }
    
    	public MainFrame ()
    	{
    		setDefaultCloseOperation (EXIT_ON_CLOSE);
    		setSize (800, 600);
    		setLocationByPlatform (true);
    		JMenuBar menubar = new JMenuBar ();
    		JMenu menu = new JMenu ("File");
    		JMenuItem menuitem = new JMenuItem ("Quit");
    		menuitem.addActionListener (new ActionListener () {
    			public void actionPerformed (ActionEvent arg0) { System.exit (0); }
    		} );
    		menu.add (menuitem);
    		menubar.add (menu);
    		menuFrames = new JMenu ("Frames");
    		menuitem = new JMenuItem ("Add Frame");
    		menuitem.addActionListener (new ActionListener () {
    			public void actionPerformed (ActionEvent arg0) { addFrame () ; }
    		} );
    		menuFrames.add (menuitem);
    		menuFrames.addSeparator ();
    		menubar.add (menuFrames);
    		setJMenuBar (menubar);
    		setContentPane (new JDesktopPane () );
    	}
    
    	public void addFrame ()
    	{
    		JInternalFrame jif = new JInternalFrame ();
    		( (JDesktopPane) getContentPane () ).add (jif);
    		jif.setTitle (String.format ("Frame #%d", ++ nextNumber) );
    		JMenuItem menuitem = new JMenuItem (new CloseAction (jif) );
    		menuitem.setText (String.format ("Close frame #%d", nextNumber) );
    		menuFrames.add (menuitem);
    		jif.setSize (100, 100);
    		jif.setVisible (true);
    	}
    	
    	private class CloseAction extends AbstractAction
    	{
    		private JInternalFrame frame;
    		
    		public CloseAction (JInternalFrame frame) { this.frame = frame; }
    		
    		public void actionPerformed (ActionEvent e)
    		{
    			frame.setVisible (false);
    			frame.dispose ();
    			menuFrames.remove ( (JMenuItem) e.getSource () );
    		}
    	}
    }


    Beitrag zuletzt geändert: 14.7.2009 20:00:32 von census
  4. Autor dieses Themas

    nacave

    nacave hat kostenlosen Webspace.

    ahh, danke^^

    Ich hätt dann noch ein kleines prob..
    also ich habe jetzt in einem JInternalFrame einen Button, der ein weiteres JInternalFrame aufrufen soll. Allerdings soll dieses JInternalFrame nicht in dem mit dem button erscheinen sondern auf dem JDesktopPane, auf dem auch das vorherige war.

    Also kurz:
    JInternalFrame1 mit Button auf JDesktopPane1
    Button startet JInternalFrame2
    JInternalFrame2 soll nicht in JInternalFrame1 erscheinen sondern auf JDesktopPane1

    Thx
  5. c****s

    Ich versteh nicht ganz die Problematik von deinen Fragen . . . Wenn du einen weiteren InternalFrame auf der DesktopPane haben willst, rufst du einfach desktop.add (new JInternalFrame () ) auf. . .

    package de.limacity.census.internaltutorial;
    
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MainFrame extends JFrame
    {
    	public static void main (String [] args) { new MainFrame ().setVisible (true); }
    
    	public MainFrame ()
    	{
    		setDefaultCloseOperation (EXIT_ON_CLOSE);
    		setSize (800, 600);
    		setLocationByPlatform (true);
    		setContentPane (new JDesktopPane () );
    		( (JDesktopPane) getContentPane () ).add (new InternalFrame () );
    	}
    
    	private class InternalFrame extends JInternalFrame
    	{
    		public InternalFrame ()
    		{
    			getContentPane ().add (new JButton ( (new AbstractAction () {
    				public void actionPerformed (ActionEvent arg0) { add (); }
    			} ) ) );	
    			setSize (100, 100);
    			setVisible (true);
    		}
    		
    		private void add () { ( (JDesktopPane) getParent () ).add (new InternalFrame () ); }
    	}
    }


    Edit: Die internal frames erscheinen wieder alle bei 0/0, ergo musst du erst einen Frame verschieben, dann den Button klicken und dann weitermachen, sonst siehst du nix.

    Beitrag zuletzt geändert: 15.7.2009 21:03:38 von census
  6. Autor dieses Themas

    nacave

    nacave hat kostenlosen Webspace.

    Oh, gut, danke *freu*

    Ich habs wohl von der falschen seite probiert... hatte irgendwie wan falschgeschrieben und deshalb keinen ActionListener in einem AtionListener hinbekommen und so... naja, jedenfalls vielen dank^^
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!