2014-06-11 150 views
0

我正在嘗試編寫一個簡短的程序,其中有一個帶有標題和4個按鈕的主頁,其中3個將離開主屏幕並轉到可以相應地輸入信息的新頁面。我通過使用拖放編輯器開始,但通過論壇發現我應該使用cardlayout,而不是我已經查看了oracle教程,但我想用按鈕來更換卡片而不是組合框。那可能嗎。CardLayout更改卡的按鈕

這是來自教程的代碼我需要更改哪個部分以使按鈕成爲更改屏幕的操作按鈕。

感謝,

package layout; 

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

public class CardLayoutDemo implements ItemListener { 
    JPanel cards; //a panel that uses CardLayout 
    final static String BUTTONPANEL = "Card with JButtons"; 
    final static String TEXTPANEL = "Card with JTextField"; 

public void addComponentToPane(Container pane) { 
    //Put the JComboBox in a JPanel to get a nicer look. 
    JPanel comboBoxPane = new JPanel(); //use FlowLayout 
    String comboBoxItems[] = { BUTTONPANEL, TEXTPANEL }; 
    JComboBox cb = new JComboBox(comboBoxItems); 
    cb.setEditable(false); 
    cb.addItemListener(this); 
    comboBoxPane.add(cb); 

    //Create the "cards". 
    JPanel card1 = new JPanel(); 
    card1.add(new JButton("Button 1")); 
    card1.add(new JButton("Button 2")); 
    card1.add(new JButton("Button 3")); 

    JPanel card2 = new JPanel(); 
    card2.add(new JTextField("TextField", 20)); 

    //Create the panel that contains the "cards". 
    cards = new JPanel(new CardLayout()); 
    cards.add(card1, BUTTONPANEL); 
    cards.add(card2, TEXTPANEL); 

    pane.add(comboBoxPane, BorderLayout.PAGE_START); 
    pane.add(cards, BorderLayout.CENTER); 
} 

public void itemStateChanged(ItemEvent evt) { 
    CardLayout cl = (CardLayout)(cards.getLayout()); 
    cl.show(cards, (String)evt.getItem()); 
} 

/** 
* Create the GUI and show it. For thread safety, 
* this method should be invoked from the 
* event dispatch thread. 
*/ 
private static void createAndShowGUI() { 
    //Create and set up the window. 
    JFrame frame = new JFrame("CardLayoutDemo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Create and set up the content pane. 
    CardLayoutDemo demo = new CardLayoutDemo(); 
    demo.addComponentToPane(frame.getContentPane()); 

    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    /* Use an appropriate Look and Feel */ 
    try { 
     //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
     UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
    } catch (UnsupportedLookAndFeelException ex) { 
     ex.printStackTrace(); 
    } catch (IllegalAccessException ex) { 
     ex.printStackTrace(); 
    } catch (InstantiationException ex) { 
     ex.printStackTrace(); 
    } catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
    /* Turn off metal's use of bold fonts */ 
    UIManager.put("swing.boldMetal", Boolean.FALSE); 

    //Schedule a job for the event dispatch thread: 
    //creating and showing this application's GUI. 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 
} 
+2

「那可能嗎?」 - 當然。對於限制使用CardLayout給這些人的組合框沒有任何魔力。 ''這裏是來自教程的代碼,我需要更改一個按鈕以更改屏幕的操作按鈕。「 - 您需要在JButton的ActionListener中進行更改。但不是簡單地將教程代碼轉儲到此處,您應該向我們展示**您的代碼嘗試**來解決此問題。否則你來這裏太早。 –

+0

編輯:完全像camickr狀態。 1+ –

+0

我已經編碼了一些,但scrdached它所有我會開始備份開始cardlayout和轉發,如果出現問題,謝謝 – AndroidNovice21

回答

2

,但我想用按鈕來更改卡不是一個組合框。那可能嗎。

本教程使用ItemListener作爲組合框。

如果你想使用按鈕,那麼你會使用一個ActionListener。

ActionListener中的代碼基本上是一樣的。那就是你需要識別你想改變的卡。

cl.show(cards, BUTTONPANEL); // for example 

雖然因爲按鈕可能會顯示你想切換到你可以做類似的面板的名稱:

cl.show(cards, event.getActionCommand()); 

,當你點擊生成ActionEvent的動作指令該按鈕包含按鈕上顯示的文本。