2012-02-21 4 views
4

저는 Java에서 GUI 프로그래밍을 처음 접했을 때 많은 연구를했으며이 문제에 대한 답을 찾을 수 없었습니다. jPanels을 Java로 스택/오버레이 할 수 있습니까?

나는 메뉴와 간단한 JFrame를 가지고 있고,이 JFrame 내부 나는 형태의 로그와 JPanel이 (있었다 사용자 입력 사용자 이름과 비밀번호)를 입력 한 다음 나는 JPanel JPanel 다른가에 따라 그 변화하고 싶은 사용자가 원한다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 쌓아 놓는 것이 JPanels는 좋다는 것을 생각한다. 하지만 Netbeans에 새로 JLayeredPanels을 추가 한 후에는 스택되지 않습니다. 나는 어딘가에 Z 순서 나 그와 비슷한 것을 사용해야한다고 읽었지 만 디자이너보기에서는 찾을 수 없다.

글쎄, 양해 해 주셔서 감사합니다.

+11

봐 A가 [CardLayout (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) "보기"를 교환하기 위해 사용으로. –

답변

7

CardLayout 클래스에는 사용자의 요구 사항을 충족 할 수있는 유용한 API가 있습니다. next(), first(), last()과 같은 방법을 사용하면 도움이됩니다. 부모 패널 및/또는 프레임 내에서 패널을 변경하는 간단한 데모를 준비했습니다. 그것을 살펴 보자 :

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

public class PanelChanger implements ActionListener 
{ 
    JPanel panels; 

    public void init(Container pane) 
    { 
     JButton switcher = new JButton("Switch Active Panel!"); 
     switcher.addActionListener(this); 

     JPanel login = new JPanel(); 
     login.setBackground(Color.CYAN); 
     login.add(new JLabel("Welcome to login panel.")); 

     JPanel another = new JPanel(); 
     another.setBackground(Color.GREEN); 
     another.add(new JLabel("Yeah, this is another panel.")); 

     panels = new JPanel(new CardLayout()); 
     panels.add(login); 
     panels.add(another); 

     pane.add(switcher, BorderLayout.PAGE_START); 
     pane.add(panels, BorderLayout.CENTER); 
    } 

    public void actionPerformed(ActionEvent evt) 
    { 
     CardLayout layout = (CardLayout)(panels.getLayout()); 
     layout.next(panels); 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("CardLayoutDemo"); 
     PanelChanger changer = new PanelChanger(); 
     changer.init(frame.getContentPane()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
관련 문제