2012-05-30 13 views
6

Bu kodu kullanılan bir kod örneği baktı:CardLayout'ta nasıl farklı kartlar gösteriliyor?

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

Ama show kullandığınızda bunu önerilmemektedir olduğunu Eclipse bir ileti alıyorum ve ben CardLayout farklı kartlarını göstermek için başka bir yol olup olmadığını merak Düğmelere tıkladığımda? Aşağıda CardLayout sınıfımın kodu var. Kodun bir kısmı kötü bir uygulama ise, öneriler de kabul edilir. Teşekkürler!

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); 
    } 
} 

cevap

13
  • Ben

    currentCard döner cl.show(cardPanel, "" + (currentCard));

DÜZENLEME dan String (Ben senin kod örneği çalıştı) eğer Java7 show(Container parent, String name) veya Java6 show(Container parent, String name)

  • bağlıdır amorti olduğunu göremiyorum

    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

    Yeni kod için teşekkürler! İyi çalışıyor! Ama eklediğiniz bazı satırlar hakkında bazı sorularm var, bunun gibi: özel statik son uzun serialVersionUID = 1L; Eclipse'de sarı bir uyarı üçgeni kaldırdığımı görebiliyorum, ama ne yapıyor? Ve ayrıca şu satırı da değiştirdiniz: getContentPane(). Add (cardPanel, BorderLayout.NORTH); whith this: add (cardPanel, BorderLayout.NORTH); fark ne? Son olarak, siz de naziksiniz ve ana yöntemde neler yaptığınızı açıklayabilir misiniz? Teşekkürler! –

    8

    Size ziyade CardLayout daha Jpanel gösteriye() aradığınız muhtemeldir olabilir en önemli değişkeni

    private CardLayout cardLayout = new CardLayout(); 
    

    2.Then SSCCE başlatmak unuttum.

    Bu yöntem,() JPanel'de (daha spesifik olarak Bileşen) var olmak için kullanılır ve setVisible() ile değiştirilmiştir. Bu, CardLayout'ın show() yönteminden tamamen farklıdır.

    Eğer eylem dinleyici Bir yan not olarak

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

    aşağıdaki gibi bir şey yapıyoruz emin olun, sizin "newing" senin CardLayout vardır görünür etmez. Bunu yaptığından emin ol.

    +0

    Evet, CardLayout'umu "yeni bırakıyorum" ve "showing" ile de bazı hatalar yaptım. Teşekkürler! –

    İlgili konular