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.
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).
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.
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.
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
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;
}
});
}
}
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);
}
});
}
}