안녕하세요, 다음 버튼을 프로그램하고 싶습니다. 다음을 누르면 JPanel이 삭제되고 새 JPanel이 추가됩니다. 하지만 둘 다 같은 JFrame에 있습니다. 내 코드의 일부를 게시합니다. 누군가가 나를 도울 수 있으면 나는 매우 행복 할 것이다.JPanel을 삭제하고 동일한 JFrame에서 새로운 JPanel을 페인트하는 방법은 무엇입니까?
class Programm extends JFrame implements ActionListener {
Buttons b = new Buttons();
Frame f = new Frame();
JButton button_next;
URL file = this.getClass().getResource("firstPage.png");
ImageIcon firstImage = new ImageIcon(getClass().getResource("firstPage.png"));
ImageIcon secoundImage = new ImageIcon(getClass().getResource("secoundPage.png"));
Image img = firstImage.getImage();
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
JLabel label;
JPanel panel = new JPanel();
public Programm(){
f.frame();
Image newimg = img.getScaledInstance((int)dim.getWidth(),(int)dim.getHeight(), java.awt.Image.SCALE_SMOOTH);
firstImage = new ImageIcon(newimg);
label= new JLabel(firstImage);
panel.setSize((int)dim.getWidth(),(int)getHeight());
panel.setLayout(new BorderLayout());
//label.setPreferredSize(new Dimension((int) dim.getWidth(),(int) dim.getHeight()));
panel.add(label, BorderLayout.CENTER);
//frame.setContentPane(new JLabel(firstImage));
addButtons();
f.frame.add(panel, BorderLayout.CENTER);
}
public void addButtons(){
b.button_next1.addActionListener(this);
f.frame.add(b.button_next1);
b.button_mainMenu.addActionListener(this);
f.frame.add(b.button_mainMenu);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == b.button_next1){
f.frame.remove(panel);
SecoundPage s = new SecoundPage();
}
if(e.getSource() == b. button_mainMenu){
f.frame.setVisible(false);
}
}
}
the next page:
public class SecoundPage extends JFrame implements ActionListener {
Buttons b = new Buttons();
Frame f = new Frame();
ImageIcon secoundImage = new ImageIcon(getClass().getResource("secoundPage.png"));
Image img = secoundImage.getImage();
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
JLabel label;
JPanel panel = new JPanel();
public SecoundPage(){
Image newimg = img.getScaledInstance((int)dim.getWidth(),(int)dim.getHeight(), java.awt.Image.SCALE_SMOOTH);
secoundImage = new ImageIcon(newimg);
addButtons();
label= new JLabel(secoundImage);
panel.setSize((int)dim.getWidth(),(int)getHeight());
panel.setLayout(new BorderLayout());
panel.add(label, BorderLayout.CENTER);
f.frame.add(label, BorderLayout.CENTER);
}
public void addButtons(){
b.button_back2.addActionListener(this);
f.frame.add(b.button_back2);
b.button_next2.addActionListener(this);
f.frame.add(b.button_next2);
b.button_mainMenu.addActionListener(this);
f.frame.add(b.button_mainMenu);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == b.button_back2);
Programm p = new Programm();
if(e.getSource() == b.button_next2){
ThirdPage t = new ThirdPage();
}
if(e.getSource() == b. button_mainMenu){
f.frame.setVisible(false);
}
}
}
답장을 보내 주셔서 감사합니다. – Amir
여러 패널을 직접 숨기거나 표시하지 마십시오. 대신 [카드 레이아웃] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)을 사용해야합니다. 'CardLayout'은 정확한 기능을 위해 설계되었습니다. – camickr