Wie öffne ich aus einem Frame einen 2ten Frame

Eklaf

Mitglied
Hi alle hab da mal ne grundlegende frage. ich muß ein Programm schreiben wo ich sehr viele Frames nutzen werde
und ich möchte ungerne interne Frames nutzen sondern will immer ein komplett seperaten neuen Frame aufmachen :confused: .
Ich häng mal zwei codes hinzu wo ihr mir das ev erklären könnt :D.

Hier der Code des ersten Frame:

Code:
 package Frameversuche;

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

public class Frame1 extends JFrame implements ActionListener
{
	private JButton btnFrame2Start;

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Frame1 inst = new Frame1();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public Frame1() {
		super("Frame1");
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				btnFrame2Start = new JButton();
				getContentPane().add(btnFrame2Start);
				btnFrame2Start.setText("Frame 2 starten");
				btnFrame2Start.setBounds(143, 42, 150, 50);
				btnFrame2Start.addActionListener(this);
			}
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource()== btnFrame2Start)
		{
			//Was muss ich hier schreiben um den 2ten frame zu starten?
		}
	}
}


Hier der Code für den 2ten Frame:

Code:
package Frameversuche;

import javax.swing.*;

public class Frame2 extends javax.swing.JFrame {
	private JLabel lblText;

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Frame2 inst = new Frame2();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public Frame2() {
		super("Frame 2");
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				lblText = new JLabel();
				getContentPane().add(lblText);
				lblText.setText("Juhu es klappt!");
				lblText.setBounds(70, 50, 150, 20);
			}
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Ich hab alles einfach gehalten mir geht es nur um das Prinzip. Danke schon mal :)
 
if (e.getSource()== btnFrame2Start)
{
//Was muss ich hier schreiben um den 2ten frame zu starten?
}

hmmm, Du benötigst in der Klasse einen Import der Klasse Frame2 und dann sowas :

Java:
import Frame2;
.....
if (e.getSource()== btnFrame2Start)
{
    Frame2 meinTollerFrame2 = new Frame();
}

Oder verstehe ich Deine Frage nicht richtig :confused:

Gruß
Klaus
 
Habe ich versucht da bringt er mir aber bei

import Frame2; //ein Fehler

und bei

Frame2 meinTollerFrame2 = new Frame(); //auch :confused::(
 
Lass die import-Anweisung weg und mach aus dem "new Frame()" nen "new Frame2()".
Also
Java:
Frame2 meinTollerFrame2 = new Frame2();
 
Habe ich versucht da bringt er mir aber bei
import Frame2; //ein Fehler
und bei
Frame2 meinTollerFrame2 = new Frame(); //auch :confused::(

Sorry - kleiner Tippfehler :

es muss natürlich heißen "new Frame2()"

Den Import kannst Du wahrscheinlich auch vergessen, da es ja das gleich package ist !

Gruß
Klaus

[EDIT] zuspät :-(
 
Hallo Eklaf.

Hier zwar eine nicht so elegante Lösung, aber sie dürfte funktionieren.
Code:
import Frameversuche.Frame2;
...

if (e.getSource() == btnFrame2Start) {
   Frame2 myFrame2 = new Frame2();
   myFrame2.show(); //Die Methode ist zwar deprecated aber es funktioniert ;)
}

MfG
Nadriel
 
Zuletzt bearbeitet:
Hallo Nadriel,

ja, "show()" ist deprecated und würde ich nicht mehr verwenden (!)

Nimm' stattdessen
Java:
myFrame2.setVisible( true );

// oder ggf. auch 
myFrame2.toFront();

Gruß
Klaus
 
Zurück