2014-11-25 3 views
0

я застрял с проблемой, то есть, у меня есть JFrame с 2 JPanel, добавленными в него, как показано на рисунке: enter image description here на рисунке выше, один JPanel есть JButtons и второй JPanel есть некоторые поля формы, я хочу изменить/(удалить старые и добавить новые JPanel), когда я нажимаю на JButtons в первом JPanel соответственно, как показано ниже: enter image description hereне может удалить/добавить JPanel в JFrame

у меня есть фрагмент кода:

myPanel.clickListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 

        MainFrame.this.getContentPane().remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER)); 
        MainFrame.this.getContentPane().add(twoPanel, BorderLayout.CENTER); 
        MainFrame.this.invalidate(); 
        MainFrame.this.validate(); 
       } 
      }); 


    myPanel.clickListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        MainFrame.this.getContentPane().remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER)); 
        MainFrame.this.getContentPane().add(customerPanel, BorderLayout.CENTER); 
        MainFrame.this.invalidate(); 
        MainFrame.this.validate(); 
       } 
      }); 

      MainFrame.this.setMaximumSize(new Dimension(600, 550)); 
      MainFrame.this.setMinimumSize(new Dimension(599, 549)); 
      MainFrame.this.setSize(600, 550); 
      MainFrame.this.setResizable(false); 
      MainFrame.this.setVisible(true); 
     } 
    }); 

через выше код я могу добавить новый JPanel, но не смог для удаления первого JPanel.

+1

почему причинам есть недействительными() ;, использовать CardLayout вместо этого – mKorbel

+0

согласен с @mKorbel. Используйте ['CardLayout'] (http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html), как показано в [этом ответе] (http://stackoverflow.com/ а/5786005/418556). –

+0

1) См. Также [Должен ли я избегать использования методов набора (Предпочтительный | Максимальный размер | Минимум) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) 2) Пожалуйста, изучите общая номенклатура Java (соглашения об именах - например, 'EveryWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', если это не 'CONSTANT') и использовать ее последовательно. –

ответ

2

, на мой взгляд, вы должны использовать CardLayout. Это позволяет вам изменять видимость JPanel, так что это действительно то, что вы хотите сделать. Вы определяете два JPanels для правой стороны, а затем в listner просто переключаете их.

Посмотрите здесь для примера: https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html