JPanel auslagern

Kaffee

Mitglied
Hallo,
ich bin (offensichtlich) ein totaler Anfänger und habe eine Frage, die wohl nicht allzu schwer zu beantworten ist.
Ich möchte verschiedene Menüs (in diesem Beispiel Hauptmenü & Optionsmenü) in eigene Klassen auslagern. Der Code dazu sieht folgendermassen aus:

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

public class Window extends JFrame
{
  Window()
  {
    super("TITEL");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setMinimumSize(new Dimension(100,100));
    setSize(500,500);
    setResizable(false);
    setLocationRelativeTo(null);
    
    Container con = getContentPane();
    JPanel main = new MainMenue();
    con.add(main);
    
    setVisible(true);
  }
  
  private void resizeWindow(int newWidth, int newHeight)
  {
    this.setSize(newWidth,newHeight);
  }
  
  public static void main(String args[])
  {
    Window window = new Window();
  }
}

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

public class MainMenue extends JPanel implements ActionListener
{
  JButton b1 ;
  JButton b2 ;
  
  public void MainMenue()
  {
    b1 = new JButton("Start");
    b1.addActionListener(this);
    this.add(b1);
    b2 = new JButton("Options");
    this.add(b2);
    this.setBackground(Color.white);
    
  }
  
  public void actionPerformed(ActionEvent e)
  {
    if(e.getSource() == b1){
      System.out.println("BUTTON CLICKED");
    }
  }
}

Unglücklicherweise bewirkt das JPanel keine Veränderung.

MfG, Kaffee
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Benenn' die Klasse mal um, "Window" ist schon belegt. Ansonsten sollte sich das nicht compilieren lassen, weil MainPanel im Konstruktor einen Container erwartet, aber keinen bekommt. Und... "keine Veränderung" - was heißt das?
 
C

Camino

Gast
Und ausserdem gibt es auch noch die JMenuBar, die du dem JFrame verpassen kannst. Also eine Menüleiste mit mehreren Menüpunkten (JMenu) und auch verschachtelten Unterpunkten (JMenuItem).
 

Kaffee

Mitglied
Es geht mir nicht darum, diese konkrete Situation zu lösen, sondern zu lernen, wie man mehrere JPanels verwenden kann. "Keine Veränderung" bedeutet, dass zwar das JFrame vorhanden ist, die Buttons allerdings fehlen. Kompilieren lässt sich das Programm ohne Probleme. Die Übergabe des Containers war nur ein Versuch, den ich nicht enfernt have -> kann ignoriert werden :D
MfG, Kaffee :)
 
Zuletzt bearbeitet:
C

Camino

Gast
Ach so... Grundsätzlich solltest du dir dann mal die LayoutManager (siehe FAQ) anschauen, mit denen du mehrere Komponenten (also auch JPanels) in dein JFrame bekommen und anordnen kannst.

EDIT:

Hast du den Namen der Klasse Window mal umbenannt?

Und wie ich gerade sehe, hast du Fehler bei den Konstruktoren.
Java:
...
public class MainMenue extends JPanel implements ActionListener
{
  JButton b1 ;
  JButton b2 ;
  
  public void MainMenue()
  {
...
Das void im Konstruktoraufruf muss weg, also nur
Code:
public MainMenue() {}
.
 
Zuletzt bearbeitet von einem Moderator:

Kaffee

Mitglied
Da hast du mich falsch verstanden. Ich möchte nicht mehrere JPanels auf einmal verwenden. Mein Gedankengang war es, verschiedene JPanels (je als eigene Klasse) zum ContentPane hinzuzufügen und wieder zu entfernen, so das alles übersichtlich bleibt.
Beispiel:
-Klasse Optionen
-Klasse Hauptmenü
-Klasse ZeichenPanel
-Haupt-Klasse Window, die alle JPanels je nach Bedarf verwaltet.

MfG, Kaffee :applaus:
 
C

Camino

Gast
Aber auch da solltest du evtl. besser mit LayoutManagern arbeiten. Der JFrame hat als Standard das BorderLayout gesetzt. Und beim BorderLayout kannst du pro Bereich (NORTH, SOUTH, WEST, EAST, CENTER) nur 1 Komponente setzen. Wenn du mehrere JPanels oder Komponenten dort reinsetzen willst, musst du die LayoutManager schachteln. Wenn du immer nur 1 JPanel dem JFrame hinzufügst, landet das im CENTER-Bereich, und da bekommst du gleichzeitig nur 1 JPanel rein. Wenn du zwischen mehreren JPanel hin- und herwechseln möchtest, würde ich dir das CardLayout empfehlen.
 

Kaffee

Mitglied
Danke für die Denkanstösse, ich werde es mit deinen Ideen probieren. Vielleicht ist damit ja schon das Problem gelöst.
MfG, Kaffee :)

Edit: Das CardLayout ist auf jeden Fall eine bessere Lösung als das manuelle verwalten der JPanels.
Allerdings weiss ich auch beim CardLayout nicht, wie ich die verschiedenen Cards in eigene Klassen / Dateien auslagern kann. Mit einem Beispiel wäre mir schon sehr geholfen. :toll:
 
Zuletzt bearbeitet:
C

Camino

Gast
Eigentlich läuft das mit dem CardLayout und dem Auslagern der verschiedenen Panels/Cards schon so ähnlich, wie du es gemacht hattest. Du hast ein Hauptpanel mit dem CardLayout als LayoutManager, welches du deinem JFrame hinzufügst. Landet dann im CENTER-Bereich, wenn du nichts anderes angibst, weil der JFrame ja das BorderLayout als Standard hat. Dann erstellst du für jedes Panel, welches du dem CardLayout hinzufügen möchtest eine Klasse, die von JPanel erbt. (Schau dir aber bei meinem Beitrag weiter oben nochmal mein EDIT an, wegen dem Namen für die Klasse Window und den fehlerhaften Konstruktoren) Dann erstellst du in deiner Hauptklasse von jedem deiner Panels ein Objekt (mit new) und fügst diese Objekte deinem CardLayout hinzu. Dann musst du dir nur noch eine Steuerung überlegen, wie du zwischen den Cards wechselst. Such mal im Internet, da gibt es jede Menge Beispiele...
 
C

Camino

Gast
Ganz grob sieht das etwa so aus:
Java:
import java.awt.CardLayout;

public class HauptPanel
extends JPanel {
	
	private CardLayout cardLayout;
	
	public HauptPanel() {
				
		cardLayout = new CardLayout();
		setLayout( cardLayout );
		
		// Panel zum CardLayout hinzufügen
		add( new Panel1(), "Panel1" );
		add( new Panel2(), "Panel2" );
		add( new Panel3(), "Panel3" );
		add( new Panel4(), "Panel4" );
		add( new Panel5(), "Panel5" );
		
	}


	// Methode zeigt die gewünschte Seite (Panel) im Frame an
	public void setCards( String cardname ) {
		cardLayout.show( this, cardname );
	}

}

Die einzelen Panels machst du dann so:
Java:
public class Panel1
extends JPanel {
    
    public Panel1() {

    // ...

    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Erste Schritte jpanel in einer klasse auslagern Java Basics - Anfänger-Themen 3
richis-fragen Optisch JPanel BorderLayout vertikaler Rand dicker als horizontaler Rand Java Basics - Anfänger-Themen 4
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Ein mit UI-Designer erstelltes JPanel einblenden Java Basics - Anfänger-Themen 0
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
Zeppi JPanel responsive Grid Java Basics - Anfänger-Themen 0
J JPanel in JScrollPanel Java Basics - Anfänger-Themen 4
Elyt JPanel als HintergrundBild Java Basics - Anfänger-Themen 7
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
O Swing JPanel Java Basics - Anfänger-Themen 4
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
S JPanel wird nicht angezeigt Java Basics - Anfänger-Themen 1
D Animation JPanel Java Basics - Anfänger-Themen 1
M JLabels "verrutschen" beim übergeben von JPanel Java Basics - Anfänger-Themen 2
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
Y Webinhalt JPanel Java Basics - Anfänger-Themen 6
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
S JPanel variablenabhängig erstellen Java Basics - Anfänger-Themen 13
J Methoden Dinge auf einem JPanel paltzieren Java Basics - Anfänger-Themen 1
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
A altes JPanel entfernen und neues öffnen Java Basics - Anfänger-Themen 5
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
J Probleme mit eigenem JPanel (IDE Eclipse) Java Basics - Anfänger-Themen 4
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
I Problem mit JPanel Java Basics - Anfänger-Themen 0
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
C JPanel in MessageDialog Java Basics - Anfänger-Themen 1
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
S vom JPanel aus durch Mouselistener Internet aufrufen Java Basics - Anfänger-Themen 6
Z JPanel bleibt leer Java Basics - Anfänger-Themen 2
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
Q JPanel Java Basics - Anfänger-Themen 2
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
N String auf JPanel bewegen Java Basics - Anfänger-Themen 6
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
S Layout mit JPanel in JScrollPanel funktioniert nicht Java Basics - Anfänger-Themen 3
S JPanel drucken -> PrinterException Java Basics - Anfänger-Themen 2
B JPanel -JTable Java Basics - Anfänger-Themen 2
H JPanel Hintergrund transparent setzen? Java Basics - Anfänger-Themen 10
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
L zoomen aus jpanel Java Basics - Anfänger-Themen 7
P Bekomme in meinen JPanel nur eine JComponente angezeigt Java Basics - Anfänger-Themen 7
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
R JFrame über einen JPanel Java Basics - Anfänger-Themen 5
I Veränderungen am JPanel vom JDialog aus Java Basics - Anfänger-Themen 6
F JPanel zu klein Java Basics - Anfänger-Themen 5
D GUI - Objekte in JPanel nach oben schieben Java Basics - Anfänger-Themen 2
S JPanel wird nicht eingefügt Java Basics - Anfänger-Themen 3
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
Kenan89 JPanel mit JTable Java Basics - Anfänger-Themen 9
I JPanel in JPanel Java Basics - Anfänger-Themen 2
A Zugriff auf Komponente innerhalb einer JPanel Java Basics - Anfänger-Themen 8
J Auf einem JPanel ein JFrame platzieren Java Basics - Anfänger-Themen 10
S JPanel anzeige Java Basics - Anfänger-Themen 2
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
T Zugreifen auf JPanel Java Basics - Anfänger-Themen 4
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
P JPanel in JTable einfügen Java Basics - Anfänger-Themen 23
E Erste Schritte Objekte werden in JPanel angedockt und maximiert Java Basics - Anfänger-Themen 7
M Componenten auf JPanel anzeigen Java Basics - Anfänger-Themen 2
F JPanel als JPG - weisse Fläche Java Basics - Anfänger-Themen 9
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
M JLabel auf JPanel positionieren Java Basics - Anfänger-Themen 8
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
M MouseListener funkioniert auf JPanel nicht Java Basics - Anfänger-Themen 8
D JPanel + ein JLabel Java Basics - Anfänger-Themen 8
B JPanel-Oberfläche speichern Java Basics - Anfänger-Themen 9
X JTable in JPanel in JTabbedPane mouseevent von jtable kommt nicht durch Java Basics - Anfänger-Themen 3
P GUI, JPanel Java Basics - Anfänger-Themen 7
H JPanel in andere Klasse übergeben Java Basics - Anfänger-Themen 7
D Grösse eines JPanel hinsichtlich LayoutManager festlegen Java Basics - Anfänger-Themen 4
B JPanel über anderem JPanel Java Basics - Anfänger-Themen 6
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
C jPanel im jPanel verändern Java Basics - Anfänger-Themen 15
B JPanel nachträglich verändern Java Basics - Anfänger-Themen 20
C JPanel erhält sporadisch keinen Fokus Java Basics - Anfänger-Themen 3
I repaint bei jpanel Java Basics - Anfänger-Themen 10
L JPanel vergrößern bis JScrollPane nicht mehr zu sehen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben