Java Gui JPanele w Menu

Odpowiedz Nowy wątek
2014-12-13 15:42
voltio
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();
 
  }
}
 
edytowany 1x, ostatnio: bogdans, 2016-12-13 18:26
Wstawiaj kod w znaczniki <code=java> </code> - bogdans 2014-12-13 15:46

Pozostało 580 znaków

2014-12-13 16:01

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

pzdr

Pozostało 580 znaków

2014-12-13 16:46
Voltio
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

no to fajnie :) miłego kodzenia pzdr - wojciechmaciejewski 2014-12-13 23:32

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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