Zmiana zawartości okna

0

Witam, nie mam zielonego pojęcia w jaki sposób zmienić zawartość okna po kliknięciu na jakiś przycisk. Czyli np. mam dwa panele na jednym wielkie A, a na drugim B. Po kliknięciu przycisku następny zmienia się zawartość okna i panele przeskakują z A na B. Próbowałem znaleźć rozwiązanie w różnych książkach, ale wszędzie opisane jest tylko działania na jednym panelu.
Pozdrawiam i z góry dzięki za podpowiedzi.

0

z zamianą koloru panelu...

 
public class Main extends JFrame {

    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JButton b = new JButton("change_panels");
    boolean ch = false;

    public Main() {
        super("window");
        setLayout(new GridLayout(0, 1));     
        add(p1);
        add(p2);
        add(b);
        b.addActionListener(new Change());

    }

    class Change implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (ch) {
                p1.setBackground(Color.RED);
                p2.setBackground(Color.BLACK);
            } else {
                p1.setBackground(Color.BLACK);
                p2.setBackground(Color.RED);
            }
            ch = !ch;
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame fr = new Main();
                fr.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                fr.setSize(200, 200);
                fr.setVisible(true);
            }
        });
    }
}

gui bardzo ładnie było wyjaśnione w "thinking in java" (w sumie tylko tą czytałem :) ). polecam...

ps.to jest prościutki program przełączający kolorki...Natomiast gdy chciałbyś przenosić między panelami jakieś konkretniejsze dane (np. zdjęcia) proponowałbym utworzenie dla poszczególnych paneli klas (klasy te dziedziczyłyby po JPanel).

0

Jeśli dobrze zrozumiałem to Jemu chodzi o nie zmianę kolorów panela (bo to proste) tylko aby pierwszy panel pojawiał się we frame'ie zamiast drugiego i na odwrót.

0

Dokładnie, na jednym panelu wiem jak operować, ale już w poważniejszych projektach takie coś nie jest wystarczające. Chodzi mi o przechodzenie z panela na panel w jednym Frame.

0

chodzi o zamianę paneli miejscami?
jeżeli tak to możesz umieścić te panele w innym panelu i tam je zaqmieniać miejscami.

 
public class Main extends JFrame {

    JPanel basic = new JPanel();
    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JButton b = new JButton("change_panels");
    boolean ch = false;

    public Main() {
        super("window");       
        setLayout(new GridLayout(0,1));
        basic.setLayout(new GridLayout(0, 1));
        add(basic);        
        p1.setBackground(Color.red);
        p2.setBackground(Color.blue);    
        basic.add(p1);
        basic.add(p2);
        add(b);
        b.addActionListener(new Replace());
    }

    class Replace implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (ch) {
                basic.removeAll();
                basic.add(p2);
                basic.add(p1);
                basic.revalidate();
            } else {
                basic.removeAll();
                basic.add(p1);
                basic.add(p2);
                basic.revalidate();
            }
            ch = !ch;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame fr = new Main();
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                fr.setSize(200, 200);
                fr.setVisible(true);
            }
        });
    }
}

mam nadzieję że teraz mi się udało dobrze zinterpretować :D

0

Chodzi raczej o coś takiego ale nie działa zbyt dobrze po pierwszych dwóch kliknięciach - nie wiem OCB. // tzn. wiem ocb :P

public class Main {

    JFrame frame;

    public static void main(String args[]) throws Exception {

	SwingUtilities.invokeLater(new Runnable() {

	    @Override
	    public void run() {
		Main m = new Main();
	    }
	});

    }
    JButton b = new JButton("Zamiana");
    JPanel pan, pan2, pan3;
    JLabel l1, l2;
    boolean ch = true;

    public Main() {

	frame = new JFrame();
	frame.setVisible(true);
	frame.setSize(300, 200);
	frame.setDefaultCloseOperation(3);


	pan = new JPanel();
	pan2 = new JPanel();
	pan3 = new JPanel();
	l1 = new JLabel("Panel 1");
	l2 = new JLabel("Panel 2");

	pan.add(l1);
	pan2.add(l2);
	pan3.add(b);

	frame.getContentPane().add(pan3);

	b.addActionListener(new ActionListener() {

	    @Override
	    public void actionPerformed(ActionEvent e) {

		if (ch) {
		 // pan3.remove(pan2);  coś takiego próbowałem ale musi być jeszcze jakiś warunek a mi się nie chce dziś kombinować
		    pan3.add(pan);
		    pan3.revalidate();
		} else {
		    pan3.remove(pan);
		    pan3.add(pan2);
		    pan3.revalidate();
		}
		ch = !ch;
	    }
	});
    }
}
 
0

A może o coś takiego?

 
public class Main extends JFrame {

    JPanel main = new JPanel();
    boolean ch = false;

    public Main() {
        super("window");
        setLayout(new BorderLayout());
        main.setLayout(new CardLayout());
        getContentPane().add(main, BorderLayout.CENTER);

        main.add(createPanle1(), "1");
        main.add(createPanle2(), "2");
        JButton b = new JButton("change_panels");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                CardLayout cl = (CardLayout) (main.getLayout());

                if (ch) {
                    cl.show(main, "1");
                } else {
                    cl.show(main, "2");
                }
                ch = !ch;
            }
        });
        getContentPane().add(b, BorderLayout.NORTH);
    }

    private JPanel createPanle1() {
        JPanel p = new JPanel();
        p.setBackground(Color.red);
        return p;
    }

    private JPanel createPanle2() {
        JPanel p = new JPanel();
        p.setBackground(Color.green);
        return p;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame fr = new Main();
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                fr.setSize(200, 200);
                fr.setVisible(true);
            }
        });
    }
}

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