2012-02-21 13 views
4

私はJavaのGUIプログラミングにはまったく新しいです。私は多くの研究を行いましたが、この問題に対する答えは見つかりませんでした。jPanelsをJavaでスタック/オーバーレイするにはどうしたらいいですか?

私はメニューを持つ単純なJFrameを持っており、このJFrameの内側に、私は形式でログを持つJPanelが(自分のユーザー名とパスワード、ユーザーの入力した)持っている、そして私は何に応じて、別のJPanelにそのJPanelを変更したいですユーザーはやりたい

これを行う最善の方法は何ですか?私は積み重なってJPanelsはOKだと思います。しかし、新しいJLayeredPanelsをNetbeansに追加した後はスタックしません。私はどこかでZオーダーなどを使うべきだと読んでいますが、デザイナーの視点でそれを見つけることはできません。

よろしくお願いいたします。

+11

"ビュー" を交換すること[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); 
    } 
} 
関連する問題