Java Gui JPanele w Menu

0

Witam wszystkich. Mam mały problem i juz od kilku dni nie wiem jak mogę go rozwiązać. Jestem bardzo poczatkującym programistą Javy (jeżeli tak mnie w ogołe można nazwac). Tworze graficzne menu do gry Pacman. W tej chwili jestem na etapie przełączania JPaneli. Mianowicie mam jeden JFrame z tłem i 2 JPanele z różnymi guzikami (Menu i Opcje). Chciałbym zrobić tak, że otwiera mi się główne Menu, po kliknięciu guzika Opcje w tym samym oknie przerysowuje mi sie JPanel na drugi, ten z guzikami od Opcji. Używałem sposobu:

 remove(m); add(p); LaunchMenu();

, jednak albo od razu 2 panele rysują mi się na sobie, albo po jednym przejsciu (Menu->Opcje->powrót) JPanele lądują w końcu na sobie. Jak mogę się pozbyć tego problemu?

Na dole umieszczam kod źródłowy

import java.awt.Color;

public class MainMenu extends JFrame{
	

	public MainMenu(String fname){
		
		PanelTło p = new PanelTło(fname);
		PanelTło m = new PanelTło(fname);
	    setTitle("Pacman");
	    
	    JPanel k = new JPanel();
	    JPanel l = new JPanel();
	    
	    k.setLayout(new BoxLayout(k, BoxLayout.Y_AXIS));
	    k.setBackground(new Color(0,0,0,0));
	    
	    l.setLayout(new BoxLayout(l, BoxLayout.Y_AXIS));
	    l.setBackground(new Color(0,0,0,0));
	    
	    
	    
	    
	    JButton button1 = new JButton("Nowa gra");
	    button1.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.out.println("Wcisnąłeś Nowa Gra");
	    		}	
	    });
	    
	    JButton button2 = new JButton("Gra z serwera");
	    button2.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.out.println("Gra z serwera");
	    		}	
	    });
	   
	    
	    JButton button3 = new JButton("Najlepsze wyniki");
	    button3.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.out.println("Najlepsze wyniki");
	    		}	
	    });
	 
	    
	    JButton button4 = new JButton("Instrukcja");
	    button4.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.out.println("Instrukcja");
	    		}	
	    });
	    
	    JButton button5 = new JButton("Opcje");
	    button5.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		remove(p);
	    		add(m);
	    		LaunchMenu();
	    				
	    	}


	    });
	    
	    JButton button6 = new JButton("Wyjście z gry");
	    button6.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.exit(1);
	    		}	
	    });
	    
	    JButton button7 = new JButton("Zmiana języka");
	    button7.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.out.println("Zmiana języka");
	    		}	
	    });
	    
	    JButton button8 = new JButton("Zmiana wyglądu Pacmana");
	    button8.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.out.println("Zmiana wyglądu");
	    		}	
	    });
	   
	    
	    JButton button9 = new JButton("Zmiana szaty graficznej");
	    button9.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		System.out.println("Zmiana szaty graficznej");
	    		}	
	    });
	 
	    
	    JButton button10 = new JButton("Powrót");
	    button10.addActionListener( new ActionListener(){
	    	public void actionPerformed(ActionEvent e){
	    		remove(m);
	    		add(p);
	    		LaunchMenu();
				
	    		}	
	    });
	    
	    
	    button1.setAlignmentX(Component.CENTER_ALIGNMENT);
	    button2.setAlignmentX(Component.CENTER_ALIGNMENT);
	    button3.setAlignmentX(Component.CENTER_ALIGNMENT);
	    button4.setAlignmentX(Component.CENTER_ALIGNMENT);
	    button5.setAlignmentX(Component.CENTER_ALIGNMENT);
	    button6.setAlignmentX(Component.CENTER_ALIGNMENT);
	    
	    k.add(Box.createRigidArea(new Dimension(0,200)));
	   	k.add(button1);
	    k.add(Box.createRigidArea(new Dimension(0,10)));
	    k.add(button2);
	    k.add(Box.createRigidArea(new Dimension(0,10)));
	    k.add(button3);
	    k.add(Box.createRigidArea(new Dimension(0,10)));
	    k.add(button4);
	    k.add(Box.createRigidArea(new Dimension(0,10)));
	    k.add(button5);
	    k.add(Box.createRigidArea(new Dimension(0,10)));
	    k.add(button6);
	    k.add(Box.createRigidArea(new Dimension(0,10)));
		
	    
	    	
	    button7.setAlignmentX(Component.CENTER_ALIGNMENT);
		button8.setAlignmentX(Component.CENTER_ALIGNMENT);
		button9.setAlignmentX(Component.CENTER_ALIGNMENT);
		button10.setAlignmentX(Component.CENTER_ALIGNMENT);
		   
		l.add(Box.createRigidArea(new Dimension(0,200)));
		l.add(button7);
		l.add(Box.createRigidArea(new Dimension(0,10)));
		l.add(button8);
		l.add(Box.createRigidArea(new Dimension(0,10)));
		l.add(button9);
		l.add(Box.createRigidArea(new Dimension(0,10)));
		l.add(button10);
		l.add(Box.createRigidArea(new Dimension(0,10)));
	    
	    
		p.add(k);
		m.add(l);
		   
		add(p);	
		
	};
	
	
  public void LaunchMenu() {
	  addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				System.exit(1);
			}
		});
	    
   pack();
   
    setLocationRelativeTo(null);
    EventQueue.invokeLater(new Runnable() {
		public void run() {
			setVisible(true);
		}
	});
    
    
    
  }
  
  public void ZmienOpcje(JPanel m, JPanel p){
	  this.remove(m);
	  this.add(p);
	  LaunchMenu();
		  
  }
  
  public static void main(String args[]) {
  
	  MainMenu menu = new MainMenu("Menu.jpg");
	  menu.LaunchMenu();
    		
  }
}

1

tak na szybko bez studiowania kodu to bym napisał że dodaj oba Panele a steruj tylko setVisible true i false w listenerach

pzdr

0

Dzieki, zastosowałem się do twojej rady, troche pomyślałem i dziala. Pozdro! :D

wojciechmaciejewski napisał(a):

tak na szybko bez studiowania kodu to bym napisał że dodaj oba Panele a steruj tylko setVisible true i false w listenerach

pzdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1