2015-01-10 4 views
0

안녕하세요, 다음 버튼을 프로그램하고 싶습니다. 다음을 누르면 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); 

     } 

    } 
    } 

답변

0

당신은 동일한 JFrame의 서로 다른 패널을 추가하고 제어하는 ​​가시성을 jPanel.setVisible(true);를 사용하거나 당신이 그것을 숨기려면 다음 jPanel.setVisible(false); 위의 코드 대신 JFrame의 사용 패널에 직접 버튼을 추가 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. – Amir

+0

여러 패널을 직접 숨기거나 표시하지 마십시오. 대신 [카드 레이아웃] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)을 사용해야합니다. 'CardLayout'은 정확한 기능을 위해 설계되었습니다. – camickr

0

다음을 누르면 JPanel이 삭제되고 새 JPanel이 추가됩니다. 하지만 둘 다 같은 JFrame에 있습니다.

How to Use CardLayout의 스윙 튜토리얼 섹션을 읽으십시오. 이 정확한 기능을 위해 CardLayout이 설계되었습니다.

관련 문제