Tôi đang cố gắng tạo GUI nhỏ, nó có 2 JButtons và 2 JPanels với một số hoạt ảnh vẽ trên mỗi hình ảnh. Theo mặc định, nó phải hiển thị JPanel đầu tiên và bằng cách nhấp vào JButton thứ hai, tôi muốn xem JPanel thứ hai của mình. Vì vậy: tôi tạo JFrame, Panel1 và Panel2, nơi tôi đã vẽ hoạt ảnh của mình, tạo Button1 và Button2 và thêm vào chúng ActionListeners. Tôi cũng có MainPanel có trong một biến trường i. Bằng cách thay đổi "i" constructor của tôi thêm vào MainPanel hoặc Panel1 (mặc định) hoặc Panel2 (bằng cách nhấp vào JButton2 tôi thay đổi i). Hơn tôi thêm MainPanel này vào khung của tôi. Vì vậy, câu hỏi của tôi: trong lớp MainPanel tôi có phương pháp refreshMe, những gì tôi nên viết ở đó để làm cho GUI của tôi hoạt động tốt? Cảm ơn. Đây là mã của tôi:Cách thêm JPanel bằng cách nhấp vào JButton?
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();
}
});
}
}
Cảm ơn bạn đã sửa mã và ví dụ của mình, điều này sẽ giúp ích rất nhiều! Có, CardLayout giải quyết vấn đề của tôi. – user1924939