2012-05-30 6 views
6

私はこのコードを使用するコードの例を見て:CardLayoutで別のカードを表示するには?

cl.show(cardPanel, "" + (currentCard)); 

しかし、私は showを使用する場合、私はそれは非推奨だとEclipseでメッセージを取得し、CardLayoutに別のカードを表示する別の方法があるかどうか、私は疑問に思いますボタンをクリックすると?以下は私のCardLayoutクラスのコードです。コードの一部が悪い習慣である場合、提案も歓迎されます。ありがとう!

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

public class CardLayoutTest extends JFrame implements ActionListener { 

// Ref 
private JPanel cardPanel, jp1, jp2, buttonPanel; 
private JLabel jl1, jl2; 
private JButton btn1, btn2; 
private CardLayout cardLayout; 

// Konstruktor 
public CardLayoutTest() 
{ 
    setTitle("Test med CardLayout"); 
    setSize(600,400); 

    cardPanel = new JPanel(); 
    buttonPanel = new JPanel(); 

    cardPanel.setLayout(cardLayout); 

    jp1 = new JPanel(); 
    jp2 = new JPanel(); 

    jl1 = new JLabel("Card 1"); 
    jl2 = new JLabel("Card 2"); 

    jp1.add(jl1); 
    jp2.add(jl2); 

    cardPanel.add(jp1, "1"); 
    cardPanel.add(jp2, "2"); 

    btn1 = new JButton("Show Card 1"); 
    btn2 = new JButton("Show Card 2"); 

    buttonPanel.add(btn1); 
    buttonPanel.add(btn2); 

    getContentPane().add(cardPanel, BorderLayout.NORTH); 
    getContentPane().add(buttonPanel, BorderLayout.SOUTH); 

    btn1.addActionListener(this); 
} 

    public void actionPerformed(ActionEvent event) 
    { 
     // ??? Show card 1 ??? 

     // ??? Show card 2 ??? 
    } 

public static void main(String[] args) { 
    CardLayoutTest frame = new CardLayoutTest(); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

答えて

13

cl.show(cardPanel, "" + (currentCard));からEDIT(私はあなたのコードの例を試してみました)

場合

  • が依存して減価償却されていることを見ることができません

    1.youは

    import java.awt.*; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.*; 
    
    public class CardLayoutTest extends JFrame { 
    
        private static final long serialVersionUID = 1L; 
        private JPanel cardPanel, jp1, jp2, buttonPanel; 
        private JLabel jl1, jl2; 
        private JButton btn1, btn2; 
        private CardLayout cardLayout = new CardLayout(); 
    
        public CardLayoutTest() { 
         setTitle("Test med CardLayout"); 
         setSize(400, 300); 
         cardPanel = new JPanel(); 
         buttonPanel = new JPanel(); 
         cardPanel.setLayout(cardLayout); 
         jp1 = new JPanel(); 
         jp2 = new JPanel(); 
         jl1 = new JLabel("Card 1"); 
         jl2 = new JLabel("Card 2"); 
         jp1.add(jl1); 
         jp2.add(jl2); 
         cardPanel.add(jp1, "1"); 
         cardPanel.add(jp2, "2"); 
         btn1 = new JButton("Show Card 1"); 
         btn1.addActionListener(new ActionListener() { 
    
          public void actionPerformed(ActionEvent e) { 
           cardLayout.show(cardPanel, "1"); 
          } 
         }); 
         btn2 = new JButton("Show Card 2"); 
         btn2.addActionListener(new ActionListener() { 
    
          public void actionPerformed(ActionEvent e) { 
           cardLayout.show(cardPanel, "2"); 
          } 
         }); 
         buttonPanel.add(btn1); 
         buttonPanel.add(btn2); 
         add(cardPanel, BorderLayout.NORTH); 
         add(buttonPanel, BorderLayout.SOUTH); 
        } 
    
        public static void main(String[] args) { 
         EventQueue.invokeLater(new Runnable() { 
    
          @Override 
          public void run() { 
           CardLayoutTest frame = new CardLayoutTest(); 
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
           frame.setVisible(true); 
          } 
         }); 
        } 
    } 
    
  • +0

    新しいコードをお寄せいただきありがとうございます。それはうまくいっている!しかし、あなたが追加したいくつかの行については、次のようにいくつか疑問があります:private static final long serialVersionUID = 1L; Eclipseで黄色い三角形を削除したのがわかりますが、それは何ですか?そして、あなたはまたこの行を置き換えました:getContentPane()。add(cardPanel、BorderLayout.NORTH);これをwhith:add(cardPanel、BorderLayout.NORTH);違いは何ですか?そして最後にあなたも親切で、あなたが主な方法でやったことを説明することができますか?ありがとう! –

    8

    あなたではなくCardLayoutより、JPanelの上でshow()を呼び出している可能性が最も高い可能性があり、最も重要な変数に

    private CardLayout cardLayout = new CardLayout(); 
    

    2.thenのSSCCEを初期化するのを忘れていました。

    show()メソッドはJPanel(より具体的にはComponent)に存在し、setVisible()に置き換えられました。これは、CardLayoutのshow()メソッドとはまったく異なります。

    あなたのアクションリスナー側の注意点としては

    CardLayout cardLayout = (CardLayout)(cardPanel.getLayout()); 
    cardLayout.show(cardPanel, "CardToShow"); 
    

    で、次のようなものをやっていることを確認し、あなたが「NEWING」あなたのCardLayoutです現れるdoes notの。それを確認してください。

    +0

    はい私はCardLayoutの "newing"を見逃してしまい、私もショーでいくつかのミスステイクをしました!ありがとう! –

    関連する問題