Zurück Button -- Background wird nicht angezeigt

Der_Falke_

Mitglied
Hallo liebe Community,

ich habe ein kleineres Problem:
Ich habe in meinem Spiel im Hauptmenü ein Button "Start", wenn man da drauf drückt erscheint ein neues Menü, dort gibt es einen "Zurück" Button. Wenn man diesen ausführt soll man wieder zurück ins Hauptmenü kommen. Ich habe es jetzt so gemacht das einfach alle Buttons, Labels etc auf die Größe 0 gesetzt werden (verschwinden) und dann der "Hauptmenücode" wieder ausgeführt wird, wodurch dann alle Objekte die bei Programmstart schon ausgeführt worden sind wieder erstellt werden. Das funktioniert auch mit Buttons und Labeln, jedoch nicht mit dem Background, der ist einfach nur grau. Wie kann ich es machen das auch der Hauptmenü Background wieder angezeigt wird?

[Java]
public class Frame extends JFrame {


public static void main(String[] args) throws IOException {
Frame frame = new Frame("MineJump");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1400,800);
frame.setResizable(false);
frame.setLocationRelativeTo(null);

Image icon = new ImageIcon(Frame.class.getResource("/Images/icon.png")).getImage();
frame.setIconImage(icon);
frame.setVisible(true);
}



public Frame(String titel) {
super(titel);

hauptmenu();
}


public void hauptmenu() {
JPanel panel = new JPanel();

JLabel background = new JLabel(new ImageIcon(Frame.class.getResource("/Images/menuBackground.png")));
background.setBounds(0,0,1400,800);
panel.add(background);

panel.setLayout(null);

JLabel name = new JLabel();
name.setBounds(237, 50, 926, 156);
name.setIcon(new ImageIcon(Frame.class.getResource("/Images/minejump.png")));

JButton startButton = new JButton(" ");
JButton optionenButton = new JButton(" ");
JButton schliessenButton = new JButton(" ");

startButton.setBounds(300, 260, 798, 80);
startButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/startButton.png")));
startButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/startButtonMouseOver.png")));
startButton.setBorderPainted(false);
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
background.setIcon(new ImageIcon(Frame.class.getResource("/Images/zwischenBackground.png")));
startButton.setBounds(0,0,0,0);
optionenButton.setBounds(0,0,0,0);
schliessenButton.setBounds(0,0,0,0);
name.setIcon(new ImageIcon(Frame.class.getResource("/Images/spiel.png")));
name.setBounds(403, 50, 593, 155);

JButton neuButton = new JButton(" ");
JButton ladenButton = new JButton(" ");
JButton zuruckButton = new JButton(" ");

neuButton.setBounds(300, 260, 798, 80);
neuButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/neuesSpielButton.png")));
neuButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/neuesSpielButtonMouseOver.png")));
neuButton.setBorderPainted(false);

ladenButton.setBounds(300, 400, 798, 80);
ladenButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/spielLadenButton.png")));
ladenButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/spielLadenButtonMouseOver.png")));
ladenButton.setBorderPainted(false);

zuruckButton.setBounds(300, 540, 798, 80);
zuruckButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/zuruckButton.png")));
zuruckButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/zuruckButtonMouseOver.png")));
zuruckButton.setBorderPainted(false);
zuruckButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
neuButton.setBounds(0, 0, 0, 0);
ladenButton.setBounds(0, 0, 0, 0);
zuruckButton.setBounds(0, 0, 0, 0);
name.setBounds(0, 0, 0, 0);
panel.setBounds(0, 0, 0, 0);
hauptmenu();
}
});

remove(panel);
add(neuButton);
add(ladenButton);
add(zuruckButton);
add(panel);
}
});

optionenButton.setBounds(300, 400, 798, 80);
optionenButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/optionenButton.png")));
optionenButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/optionenButtonMouseOver.png")));
optionenButton.setBorderPainted(false);
optionenButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("223");
}
});

schliessenButton.setBounds(300, 540, 798, 80);
schliessenButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/schliessenButton.png")));
schliessenButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/schliessenButtonMouseOver.png")));
schliessenButton.setBorderPainted(false);
schliessenButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});

add(startButton);
add(optionenButton);
add(schliessenButton);

add(name);
add(panel);
}
}
[/Java]

Mit freundlichen Grüßen
Der_Falke_
 
Ich weiß nicht in wie weit du die mit Layouts auskennst. Ich würde dir empfehlen dir das CardLayout mal anzusehen.
Damit kannst du mehrere JPanels erstellen, die die Elemente deiner verschiedenen Menüs enthalten, erstellen und dann jeweils ein Panel anzeigen lassen anzeigen lassen.
 
Ich hatte die Buttons erst in einem Layout angelegt, jedoch war das weitaus mehr Code und ich hatte das Problem das der Background immer die Buttons überschrieben hat, diese wurden immer erst angezeigt nachdem man mit der Maus darüber gegangen ist, deswegen habe ich es dann so gemacht, doch ich kriege es halt jetzt nicht hin das der Hauptmenü Background angezeigt wird wenn man den zurück Button betätigt. Ich habe auch schon verschiedene Sachen ausprobiert. Mal war nur in der Mitte ein Teil des Fensters mit dem neuen Background, mal wurden die Buttons wieder übermalt, etc.
Wie kriege ich also den Zustand des Fensters den das Programm auch hat wenn es gestartet wird?
 
Am besten schreibst du am besten einmal mehrere Methoden, damit das ganze etwas übersichtlicher wird, dann könntest du nämlich einfach die Methode ausführen, die das Hauptmenu anzeigt. 😉
Wenn du nicht mit Layouts zurecht kommst (wäre aber wirklich die beste Variante) dann schlage ich dir vor, vielleicht einmal alle Komponenten, die zum Hauptmenu gehören auf ein JPanel und alle die zum anderen Menu gehören auf ein anderes JPanel zu setzen. Dann kannst du nämlich ganz einfach mit JPanel.setVisible(boolean) Ein Menu ein- bzw. ausblenden.
 
Danke @censored !

Funktioniert. Ich habe nun verschiedene Panels angelegt die nach Bedarf einfach nur Visible true oder false gesetzt werden brauchen!

Hier mein jetziger Code:
[Java]
public class Frame extends JFrame {


public static void main(String[] args) throws IOException {
Frame frame = new Frame("MineJump");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1400,800);
frame.setResizable(false);
frame.setLocationRelativeTo(null);

Image icon = new ImageIcon(Frame.class.getResource("/Images/icon.png")).getImage();
frame.setIconImage(icon);
frame.setVisible(true);
}



public Frame(String titel) {
super(titel);

hauptmenu();
}


public void hauptmenu() {
JPanel panelHM = new JPanel();

panelHM.setLayout(null);

JLabel backgroundHM = new JLabel(new ImageIcon(Frame.class.getResource("/Images/menuBackground.png")));
backgroundHM.setBounds(0,0,1400,800);

JLabel nameMinejump = new JLabel();
nameMinejump.setBounds(237, 50, 926, 156);
nameMinejump.setIcon(new ImageIcon(Frame.class.getResource("/Images/minejump.png")));

JButton startButton = new JButton(" ");
JButton optionenButton = new JButton(" ");
JButton schliessenButton = new JButton(" ");

startButton.setBounds(300, 260, 798, 80);
startButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/startButton.png")));
startButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/startButtonMouseOver.png")));
startButton.setBorderPainted(false);
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
panelHM.setVisible(false);
spielmenu();
}
});

optionenButton.setBounds(300, 400, 798, 80);
optionenButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/optionenButton.png")));
optionenButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/optionenButtonMouseOver.png")));
optionenButton.setBorderPainted(false);
optionenButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("223");
}
});

schliessenButton.setBounds(300, 540, 798, 80);
schliessenButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/schliessenButton.png")));
schliessenButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/schliessenButtonMouseOver.png")));
schliessenButton.setBorderPainted(false);
schliessenButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});

panelHM.add(startButton);
panelHM.add(optionenButton);
panelHM.add(schliessenButton);
panelHM.add(nameMinejump);
panelHM.add(backgroundHM);

add(panelHM);
panelHM.setVisible(true);
}


public void spielmenu() {
JPanel panelSpiel = new JPanel();

panelSpiel.setLayout(null);

JLabel backgroundSpiel = new JLabel(new ImageIcon(Frame.class.getResource("/Images/spielBackground.png")));
backgroundSpiel.setBounds(0,0,1400,800);

JLabel nameSpiel = new JLabel(new ImageIcon(Frame.class.getResource("/Images/spiel.png")));
nameSpiel.setBounds(403, 50, 593, 155);

JButton neuButton = new JButton(" ");
JButton ladenButton = new JButton(" ");
JButton zuruckButton = new JButton(" ");

neuButton.setBounds(300, 260, 798, 80);
neuButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/neuesSpielButton.png")));
neuButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/neuesSpielButtonMouseOver.png")));
neuButton.setBorderPainted(false);

ladenButton.setBounds(300, 400, 798, 80);
ladenButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/spielLadenButton.png")));
ladenButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/spielLadenButtonMouseOver.png")));
ladenButton.setBorderPainted(false);

zuruckButton.setBounds(300, 540, 798, 80);
zuruckButton.setIcon(new ImageIcon(Frame.class.getResource("/Images/zuruckButton.png")));
zuruckButton.setRolloverIcon(new ImageIcon(Frame.class.getResource("/Images/zuruckButtonMouseOver.png")));
zuruckButton.setBorderPainted(false);
zuruckButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
panelSpiel.setVisible(false);
hauptmenu();
}
});

panelSpiel.add(neuButton);
panelSpiel.add(ladenButton);
panelSpiel.add(zuruckButton);
panelSpiel.add(nameSpiel);
panelSpiel.add(backgroundSpiel);

add(panelSpiel);
panelSpiel.setVisible(true);
}





}
[/Java]
 

Zurück
Oben