Ich versuche, eine kleine GUI zu erstellen, es hat 2 JButtons und 2 JPanels mit einigen Zeichnungsanimation auf jedem von ihnen. Standardmäßig muss das erste JPanel angezeigt werden, und durch Klicken auf das zweite JButton möchte ich mein zweites JPanel sehen. Also: Ich erstelle JFrame, Panel1 und Panel2, wo ich meine Animationen gezeichnet habe, Button1 und Button2 erstellt und ihnen ActionListeners hinzugefügt habe. Ich habe auch MainPanel, das in einer Feldvariablen i hat. Durch Ändern dieses "i" fügt mein Konstruktor zu MainPanel entweder Panel1 (Standard) oder Panel2 hinzu (indem ich auf JButton2 wechsle, ändere ich). Dann füge ich dieses MainPanel meinem Frame hinzu. Also meine Frage: In der Klasse MainPanel habe ich die refreshMe-Methode, was soll ich da schreiben, damit meine GUI richtig funktioniert? Vielen Dank. Hier ist mein Code:Wie Sie JPanel hinzufügen, indem Sie auf JButton klicken?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GuiTest {
public static void main(String[] args) {
JFrame f = new JFrame();
MainPanel myPanel = new MainPanel();
f.add(myPanel);
Button1 button1 = new Button1();
Button2 button2 = new Button2();
myPanel.add(button1);
myPanel.add(button2);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
class MainPanel extends JPanel {
Panel1 p1 = new Panel1();
Panel2 p2 = new Panel2();
public int i = 1; //this is being changed later by clicking JButton
// I use this setter later in actionPerformed in order to change i
public void setI(int i) {
this.i = i;
}
MainPanel() {
if (i == 1) {
this.add(p1);
}
if (i == 2) {
this.add(p2);
}
}
public void refreshMe() {
// Need some help here:
// I don't know what should I write, how to make a repaint of myPanel?
System.out.println("just test, if the method refreshMe working by clicking some button");
}
}
class Panel1 extends JPanel {
public Panel1() {
this.setBackground(Color.BLUE);
// a lot of drawing stuff going on here
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
class Panel2 extends JPanel {
public Panel2() {
this.setBackground(Color.GREEN);
// a lot of drawing stuff going on here
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
class Button1 extends JButton {
MainPanel someObj1 = new MainPanel();
Button1() {
setText("Show Annimation A");
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
someObj1.setI(1);
System.out.println("The variable i is now: " + someObj1.i);
someObj1.refreshMe();
}
});
}
}
class Button2 extends JButton {
MainPanel someObj2 = new MainPanel();
Button2() {
setText("Show Annimation B");
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
someObj2.setI(2);
System.out.println("The variable i is now: " + someObj2.i);
someObj2.refreshMe();
}
});
}
}
Vielen Dank für die Korrektur meines Codes und Beispiel, das hilft sehr! Ja, CardLayout löst mein Problem. – user1924939