2012-06-05 3 views
0

개체 (패널) 자체에서 JButton의 이벤트 트리거를 사용하는 여러 JPanel 클래스 간의 탐색을 코딩하는 방법을 알려줄 사람이 있습니까? 나는 CardLayout에 대해 읽었습니다. 상위 패널에서 발생한 이벤트에서 패널을 바꿀 수 있습니다. 내가 원하는 것은 패널에 포함 된 버튼을 클릭하면 사라 지거나 원하는 패널이 표시되어야합니다. 해결책을 찾지 못하는 것 같습니다.여러 패널 간 이동

+3

* "누군가가 말해 줄 수 ..."우리가 할 수있는,하지만 * 물론 [당신이 * 시도 * 무슨?] (http://www.whathaveyoutried.com/) 내 말은 * 게다가 * 요청 무작위 낯선 사람 당신을 위해 그것을 할 인터넷에. –

+2

정확합니다. CardLayout이 이것을 할 수 있습니다. 이제 코드를 작성하고 어떤 일이 발생하는지 확인해보십시오. * 그런 다음 * 막히면 뒤로 와서 코드를 보여 주시고 어떻게 또는 왜 작동하지 않는지 알려주십시오. * 해결책을 찾지 말고 해결책을 쓰도록 노력하십시오. 노력으로 더 많은 것을 배우고 나를 신뢰하십시오. –

답변

3

을 전환하는 JButton을 사용하는 대신 JMenu with JMenuItems를 사용할 수 있습니다.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Testing extends JFrame { 

    private JPanel cardHolder; 
    private CardLayout cards; 
    private static final String cardA = "A"; 
    private static final String cardB = "B"; 

    private class Switcher implements ActionListener{ 
     String card;   
     Switcher(String card) { this.card = card; } 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      cards.show(cardHolder, card); 
     } 
    } 

    private void run() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     JPanel pa = new JPanel(); 
     JButton ba = new JButton("Switch to B"); 
     ba.addActionListener(new Switcher(cardB)); 
     pa.add(ba); 
     pa.setBackground(Color.CYAN); 

     JPanel pb = new JPanel(); 
     JButton bb = new JButton("Switch to A"); 
     bb.addActionListener(new Switcher(cardA)); 
     pb.add(bb); 
     pb.setBackground(Color.MAGENTA); 

     cardHolder = new JPanel(); 
     cards = new CardLayout(); 
     cardHolder.setLayout(cards); 
     cardHolder.add(pa, cardA); 
     cardHolder.add(pb, cardB); 
     add(cardHolder); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     try { 
      SwingUtilities.invokeAndWait(new Runnable() { 
       @Override 
       public void run() { 
        new testing().run(); 
       } 
      }); 
     } catch (Exception ex) { } 
    } 
} 
+1

+1하지만 1) 결코 JFrame/JDialog/JWindow를 확장하지 마십시오. 2) Java 명명 규칙을 올바르게 사용하면 클래스 이름'testing'이 'Testing'이어야합니다. – mKorbel

+0

Gene, 감사합니다. 내 오류 패널을 숨기거나 표시하는 panel.setVisible(), revalidate() 및 repaint() 메서드를 사용하려고했습니다. 죄송합니다. 코드를 게시하지 않았기 때문에 많은 일을하지 않을 것이라고 생각했습니다. 고마워. StackOverFlow를 처음 접했을 때 어디에서나 솔루션을 +1 할 수 있습니다. – CodeThag

+0

* "솔루션을 +1 할 수있는 곳은 어디에도 있습니다."* 충분한 담당자가있을 때까지는 아닙니다. 전철기. 답변을 수락하는 것은 (항상 그렇듯이) 항상 답변 만족도를 나타내는 좋은 방법입니다. –

2

당신은 카드 내 아이의 행동에서 카드를 전환 방지 CardLayout에 대해 아무것도 없다 betweens 카드를