2017-12-14 31 views
0

나는 cardlayout 레이아웃이있는 메인 패널을 포함하는 프레임이있는 프로그램을 가지고 있으며 다른 카드/패널을 표시하려고합니다.JAVA cardLayout. 다른 클래스에서 카드를 호출하는 방법

필자의 경우 나는 버튼 액션 리스너로부터 새로운 카드를 호출하기 위해 정말로 고심하고있다.

버튼을 클릭 한 후에 새 카드를 표시하고 싶지만 내 청취자가 입력 한 코드 중 아무 것도 내가 원하는 카드를 표시하지 않았습니다.

내부에 println을했기 때문에 내 actionListener 작업을 알았습니다.

여기 내 코드가 있습니다. 나는 불필요한 것을 없애 버리고 읽기가 더 쉽다. 도와 주셔서 감사합니다!

내가 코드를 구조화에 대한 모든 조언을 것

메인 프레임 :

public class MainFrame extends JFrame{ 

final static String CONNEXION_VIEW = "connexionView"; 
final static String CONNEXION_FAILED_VIEW = "connexionRefusee"; 

public MainFrame() 
{ 
    super(); 
    initialize(); 
} 


private void initialize() 
{ 
    getMainPanel(); 

    add(getMainPanel()); 

} 

CardLayout cardLayout; 
public CardLayout getCardLayout() 
{ 
    if (cardLayout == null) 
    { 
     cardLayout = new CardLayout(); 
    } 
    return cardLayout; 
} 


JPanel mainPanel; 
public JPanel getMainPanel() 
{ 
    if (mainPanel == null) 
    { 
     mainPanel = new JPanel(); 

     mainPanel.setLayout(getCardLayout()); 

     mainPanel.add(CONNEXION_VIEW, getConnexionView()); 
     mainPanel.add(CONNEXION_FAILED_VIEW, getConnexionFailedView()); 

    } 
    return mainPanel; 
} 

ConnexionView connexionView; 
protected ConnexionView getConnexionView() 
{ 
    if (connexionView == null) 
    { 
     connexionView = new ConnexionView(); 
    } 
    return connexionView; 
} 

ConnexionFailedView connexionFailedView; 
protected ConnexionFailedView getConnexionFailedView() 
{ 
    if (connexionFailedView == null) 
    { 
     connexionFailedView = new ConnexionFailedView(); 
    } 
    return connexionFailedView; 
} 

접속보기 버튼과 하나가 난 내 코드를 삽입 할 작업 리스너를 클릭

public class ConnexionView extends JPanel{ 

GridBagLayout gbl = new GridBagLayout(); 

private JButton btnConnexion; 

Dimension dimensionBouton = new Dimension(170, 30); 

public ConnexionView() 
{ 
    super(); 
    initialise(); 
} 

private void initialise() 
{ 
    setLayout(gbl); 

    GridBagConstraints gbcbtnConnexion = new GridBagConstraints(); 
    gbcbtnConnexion.gridwidth = GridBagConstraints.REMAINDER; 
    gbcbtnConnexion.gridheight = GridBagConstraints.REMAINDER; 
    gbcbtnConnexion.gridx = 1; 
    gbcbtnConnexion.gridy = 2; 
    add(getBtnConnexion(), gbcbtnConnexion); 
} 

private JButton getBtnConnexion() 
{ 
    if (btnConnexion == null) 
    { 
     btnConnexion = new JButton("Connexion"); 
     btnConnexion.setPreferredSize(dimensionBouton); 
     btnConnexion.setMinimumSize(dimensionBouton); 

     btnConnexion.addMouseListener(new MouseAdapter() 
     { 
      @Override 
      public void mouseClicked(MouseEvent e) 
      { 
       /////code to display the connexion_Failed_View 

       System.out.println("test"); 
      } 
     }); 
    } 
    return btnConnexion; 
} 

}

와 접속이보기 실패의 하나는 내가 버튼을 미리

당신은 어떻게 든 버튼의 구성 요소를 유지해야합니다

답변

0

public class ConnexionFailedView extends JPanel{ 

public ConnexionFailedView() 
{ 
    super(); 
    initialise(); 
} 

private void initialise() 
{ 
    setBackground(Color.YELLOW); 
} 

감사를 클릭 한 후 액세스 할 수 있도록 표시 할.

class ConnexionView { 
    private JComponent mainPanel; 
    public ConnexionView(JComponent mp) { mainPanel = mp; } 
} 

명백히 MainFrame이이를 전달해야 함을 의미합니다.

이제 청취자는 일

// it would be cleaner if you passed the layout in the constructor as well 
CardLayout cl = (CardLayout) mainPanel.getLayoutManager(); 
cl.show(mainPanel, MainFrame.CONNEXION_FAILED_VIEW); 
+0

할 수있다! 감사합니다. – Clement

+0

@Clement Great. 답변 옆에있는 체크 표시를 선택하여 자유롭게 답변 할 수 있습니다. :) – daniu