2016-12-08 6 views
0

私はメインクラスとプロクラスの2つのクラスを持っています。メインクラスには、プロクラスのパネルをさらに表示する入門パネルがあります。プロクラスの2番目のパネルには、メインクラスのパネルを表示する必要がある「ホーム」ボタンがあります。どのように私は "ホーム"ボタンの仕事をするのですか教えてください?クラスの上別のクラスのパネルからメインクラスパネルに戻るにはどうすればいいですか?

class proMain extends JPanel { 
    JPanel pan2 = new JPanel(); 
    JButton b1, b2, b3; 
    CardLayout lay = new CardLayout(); 

    public void pshow() { 

     // First Panel 
     pan.setBackground(Color.red); 
     b1 = new JButton("Next"); 
     b1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       if (ae.getActionCommand().equals("Next")) { 
        pan2.setVisible(true); 
        pan.setVisible(false); 
       } 
      } 
     }); 

     pan.add(b1); 

     // Second Panel 
     b2 = new JButton("Previous"); 
     b2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       if (ae.getActionCommand().equals("Previous")) { 
        pan.setVisible(true); 
        pan2.setVisible(false); 
       } 
      } 
     }); 
     b3 = new JButton("Home"); 
     b3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       if (ae.getActionCommand() == "Home") { 
        // 
       } 
      } 
     }); 
     pan2.setBackground(Color.cyan); 
     pan2.add(b2); 
     pan2.add(b3); 
     pan.setVisible(true); 
     pan2.setVisible(false); 
     add(pan); 
     add(pan2); 
    } 
} 

proMainクラスであり、主なクラスがある:

public class proDis { 
    public static void main(String[] args) { 
     JFrame fr = new JFrame("CrdLay"); 
     JPanel pan3 = new JPanel(); 
     JButton b = new JButton("Next"); 
     CardLayout cl = new CardLayout(); 
     fr.setLayout(cl); 
     b.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       if (ae.getActionCommand().equals("Next")) { 
        pan3.setVisible(false); 
        proMain pm = new proMain(); 
        pm.pshow(); 
        pm.setLayout(cl); 
        fr.add(pm); 
        pm.setVisible(true); 
       } 
      } 
     }); 
     pan3.setBackground(Color.gray); 
     pan3.add(b); 
     fr.setSize(100, 300); 
     fr.setVisible(true); 
     fr.add(pan3); 
    } 
} 
+0

あなたは 'pan3.setVisible(false)' ...を設定しました。逆にしてください。これを表示し、 'pm'を隠す。これはCardLayoutではうまくいきません...長時間使用しないでください – AxelH

+0

または 'proDis.main(args);を呼び出すとメインフレームxD – XtremeBaumer

+0

@XtremeBaumerに戻ります。良いアイデア...これはここで新しいフレームを生成しますが、一般的なプロジェクト(ロードプロパティ、基本的な検証、...)の予想よりもはるかに多くの作業を行うことができる – AxelH

答えて

1

あなたは正しいアプローチであるCardLayoutを、使用しようとしています。ただし、実装が間違っています。

コードの問題は、CardLayoutのメソッドを使用して、どのパネルが表示されているかを制御していないことです。 CardLayoutはメソッドをサポートしています。 next(...)およびprevious(...)のように、すべてのパネルを順番に移動し、方法show(...)を使用して特定のパネルを表示します。

最初に行うことは、各パネルをレイアウトに追加するときにパネルに名前を付けることです。次に、上の方法を使用して表示されているパネルを制御するコードを変更します。どのパネルでも見えるようにする必要はありません。これはCardLayoutの仕事です。

詳細と作業例については、How to Use CardLayoutのSwingチュートリアルのセクションをお読みください。

関連する問題