Mình có các file Java sau:
JFrameA.java (extends JFrame)
JPanelB.java (extends JPanel) có add button B
JPanelC.java (extends JPanel)
Trên JFrameA đã có add một JPanelA và ở JPanelA có một JButton A. Mình set up button A sao cho khi click vào nó thì:
this.remove(JPanelA);
this.add(new JPanelB);
Bây giờ thì mình có JPanelB nằm trong JFrameA. Bây giờ mình muốn nếu mình click và button B thì JFrameA sẽ remove JPanelB và add(JPanelC). Nhưng như mình không biết gọi lại JFrameA như thế nào cả. Đây là giải pháp tạm thời của mình:
Mình set up trong button B như sau:
JFrameA fr = new JFrameA();
fr.remove(JPanelA); // vì JPanelA được add sẵn trong fr
fr.add(JPanelB);
fr.setVisible(true);
Cách này nó củng cho kết quả tương tự nhưng nó xuất hiện thêm một cửa sổ nữa, bên cạnh của sổ JFrameA mình run lúc đầu ( tộng cộng mình run JFrameA 2 lần).
Mình muốn có thể làm việc trên JFrameA ban đầu nhưng nghĩ mãi không ra. Ai có giải pháp cho vấn đề này không ạ.
Em cảm ơn.
Skyfall:
Skyfall:
JFrameA fr = new JFrameA();
Nó hiện cửa sổ mới vì bạn đã tạo 1 Frame nữa trong sự kiện click.
Trường hợp này bạn cũng có thể dùng cardLayout
//Create the "cards".
JPanel cards;
JPanel B= new JPanel();
Button button = new Button();
B.add(button);
...
JPanel C= new JPanel();
...
//Create the panel that contains the "cards".
cards = new JPanel(new CardLayout());
cards.add(B, "Panel B");
cards.add(C, "Panel c");
//call panel when click button
private void buttonPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
cards.show(C,"Panel C");
cards.repaint();
cards.validate();
}
1 Like
Hoặc đơn giản chỉ cần validate lại Frame
public static void main(String[] args) {
//tao JFrame
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
f.setSize(600, 500);
f.setLocation(500, 400);
f.setVisible(true);
// Tao 2 Jpanel a và b, button a1, b1
JPanel a = new JPanel(new FlowLayout());
a.setBackground(Color.red);
JButton a1 = new JButton("Go Panel B");
JPanel b = new JPanel(new FlowLayout());
b.setBackground(Color.CYAN);
JButton b1 = new JButton("Go Panel A");
b.add(b1);
a.add(a1);
f.add(a, BorderLayout.CENTER);
f.validate();
// action click button a1
a1.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
f.remove(a);
f.add(b, BorderLayout.CENTER);
f.validate();
f.repaint();
}
});
//action click button b1
b1.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
f.remove(b);
f.add(a, BorderLayout.CENTER);
f.validate();
f.repaint();
}
});
}
1 Like