ActionListener von Panel1 auf Panel2 sterten
lima-city → Forum → Programmiersprachen → Java
beispiel
button
code
erscheinen
folgendes problem
format
frage
import
instanz
landen
machen
mainframe
methode
obacht
programm
schliessen
string
swing
verschieben
weitermachen
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 -
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 -
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^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage