2012-06-27 38 views
1

我正在寫一個applet來購買音樂。基本上它有16首歌曲,歌曲1,歌曲2,歌曲3,歌曲4等作爲複選框。 用戶應該能夠選擇他/她想要購買的歌曲,然後點擊添加到購物車以顯示購物車。購物車應該根據在前一個屏幕中進行的檢查來確定標籤。如何根據複選框狀態創建標籤?

例如:若鬆1,3和5選中,車應顯示三個標籤 - 歌曲1,3和5

那麼,我該如何創建一個基於標籤的檢查,而無需創建16手頭有標籤,搞得一團糟?我應該以某種方式使用數組?

它有點複雜,因爲我已經創建了卡片佈局中的複選框。我寫了一個小程序(使用普通的舊記事本),用單選按鈕選擇一種流派。選擇一個單選按鈕會顯示4首歌曲(這是我用過卡片的地方)。

content_cat.setLayout(new BoxLayout(content_cat,     

           BoxLayout.Y_AXIS)); 
    content_cat.add(Box.createRigidArea(new Dimension(0,30))); 
    category_label = new JLabel("Select the category"); 
    category_label.setAlignmentX(Component.CENTER_ALIGNMENT); 
    content_cat.add(category_label); 
    content_cat.add(Box.createRigidArea(new Dimension(0,30))); 
    pop = new JRadioButton("Pop"); 
    pop.setAlignmentX(Component.LEFT_ALIGNMENT); 
    content_cat.add(pop); 
    content_cat.add(Box.createRigidArea(new Dimension(0,30))); 
    rock = new JRadioButton("Rock"); 
    rock.setAlignmentX(Component.LEFT_ALIGNMENT); 
    content_cat.add(rock); 
    content_cat.add(Box.createRigidArea(new Dimension(0,30))); 
    jazz = new JRadioButton("Jazz"); 
    jazz.setAlignmentX(Component.LEFT_ALIGNMENT); 
    content_cat.add(jazz); 
    content_cat.add(Box.createRigidArea(new Dimension(0,30))); 
    hiphop = new JRadioButton("Hip hop"); 
    hiphop.setAlignmentX(Component.LEFT_ALIGNMENT); 
    content_cat.add(hiphop); 
    content_cat.add(Box.createRigidArea(new Dimension(0,30))); 

    group = new ButtonGroup(); 
    group.add(pop); 
    group.add(rock); 
    group.add(jazz); 
    group.add(hiphop); 

    pop.addItemListener(this); 
    rock.addItemListener(this); 
    jazz.addItemListener(this); 
    hiphop.addItemListener(this); 


    //List Panel 

    content_list = new Panel(); 
    gbc_content.gridx = 1; 
    gbc_content.gridy = 0; 
    gbc_content.weightx = 3; 
    gbc_content.weighty = 1; 
    gbc_content.fill = GridBagConstraints.BOTH; 
    content.add(content_list,gbc_content); 

    content_list.setLayout(new GridBagLayout()); 

    //List Title Panel 

    list_title = new Panel(); 
    gbc_list.gridx = 0; 
    gbc_list.gridy = 0; 
    gbc_list.weightx = 1; 
    gbc_list.weighty = 1; 
    gbc_list.fill = GridBagConstraints.BOTH; 
    content_list.add(list_title,gbc_list); 
    list_label = new JLabel("List of CD's Available"); 
    list_title.add(list_label); 

    //List Cards Panel 

    list_card = new Panel(); 
    list_card.setLayout(new CardLayout()); 
    gbc_list.gridx = 0; 
    gbc_list.gridy = 1; 
    gbc_list.weightx = 1; 
    gbc_list.weighty = 4; 
    gbc_list.fill = GridBagConstraints.BOTH; 
    content_list.add(list_card,gbc_list); 

    //Pop card 

    card_pop = new Panel(); 
    card_pop.setLayout(new BoxLayout(card_pop,      

               BoxLayout.Y_AXIS)); 
    card_pop.add(Box.createRigidArea(new Dimension(0,30))); 
    pop1 = new JCheckBox("21 - Adele"); 
    pop1.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_pop.add(pop1); 
    card_pop.add(Box.createRigidArea(new Dimension(0,30))); 
    pop2 = new JCheckBox("D'elles - Celine Dion"); 
    pop2.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_pop.add(pop2); 
    card_pop.add(Box.createRigidArea(new Dimension(0,30))); 
    pop3 = new JCheckBox("Invincible - Michael Jackson"); 
    pop3.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_pop.add(pop3); 
    card_pop.add(Box.createRigidArea(new Dimension(0,30))); 
    pop4 = new JCheckBox("Speak Now - Taylor Swift"); 
    pop4.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_pop.add(pop4); 
    card_pop.add(Box.createRigidArea(new Dimension(0,30))); 

    //Rock card 

    card_rock = new Panel(); 
    card_rock.setLayout(new BoxLayout(card_rock,     

               BoxLayout.Y_AXIS)); 
    card_rock.add(Box.createRigidArea(new Dimension(0,30))); 
    rock1 = new JCheckBox("Let It Be - Beatles"); 
    rock1.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_rock.add(rock1); 
    card_rock.add(Box.createRigidArea(new Dimension(0,30))); 
    rock2 = new JCheckBox("Viva la Vida - Coldplay"); 
    rock2.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_rock.add(rock2); 
    card_rock.add(Box.createRigidArea(new Dimension(0,30))); 
    rock3 = new JCheckBox("Meteora - Linkin Park"); 
    rock3.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_rock.add(rock3); 
    card_rock.add(Box.createRigidArea(new Dimension(0,30))); 
    rock4 = new JCheckBox("Dark Horse - Nickelback"); 
    rock4.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_rock.add(rock4); 

    //Jazz card 

    card_jazz = new Panel(); 
    card_jazz.setLayout(new BoxLayout(card_jazz,     

               BoxLayout.Y_AXIS)); 
    card_jazz.add(Box.createRigidArea(new Dimension(0,30))); 
    jazz1 = new JCheckBox("Come Sing With Me - Frank Sinatra"); 
    jazz1.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_jazz.add(jazz1); 
    card_jazz.add(Box.createRigidArea(new Dimension(0,30))); 
    jazz2 = new JCheckBox("Closer - Josh Groban"); 
    jazz2.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_jazz.add(jazz2); 
    card_jazz.add(Box.createRigidArea(new Dimension(0,30))); 
    jazz3 = new JCheckBox("Little Broken Hearts - Norah Jones"); 
    jazz3.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_jazz.add(jazz3); 
    card_jazz.add(Box.createRigidArea(new Dimension(0,30))); 
    jazz4 = new JCheckBox("Genius and Friends - Ray Charles"); 
    jazz4.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_jazz.add(jazz4); 
    card_jazz.add(Box.createRigidArea(new Dimension(0,30))); 

    //Hiphop card 

    card_hiphop = new Panel(); 
    card_hiphop.setLayout(new BoxLayout(card_hiphop,    

               BoxLayout.Y_AXIS)); 
    card_hiphop.add(Box.createRigidArea(new Dimension(0,30))); 
    hiphop1 = new JCheckBox("Curtis - 50 Cent"); 
    hiphop1.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_hiphop.add(hiphop1); 
    card_hiphop.add(Box.createRigidArea(new Dimension(0,30))); 
    hiphop2 = new JCheckBox("Freedom - Akon"); 
    hiphop2.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_hiphop.add(hiphop2); 
    card_hiphop.add(Box.createRigidArea(new Dimension(0,30))); 
    hiphop3 = new JCheckBox("Relapse - Eminem"); 
    hiphop3.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_hiphop.add(hiphop3); 
    card_hiphop.add(Box.createRigidArea(new Dimension(0,30))); 
    hiphop4 = new JCheckBox("Takin' Over"); 
    hiphop4.setAlignmentX(Component.LEFT_ALIGNMENT); 
    card_hiphop.add(hiphop4); 
    card_hiphop.add(Box.createRigidArea(new Dimension(0,30))); 

    pop1.addItemListener(this); 
    pop2.addItemListener(this); 
    pop3.addItemListener(this); 
    pop4.addItemListener(this); 

    rock1.addItemListener(this); 
    rock2.addItemListener(this); 
    rock3.addItemListener(this); 
    rock4.addItemListener(this); 

    jazz1.addItemListener(this); 
    jazz2.addItemListener(this); 
    jazz3.addItemListener(this); 
    jazz4.addItemListener(this); 

    hiphop1.addItemListener(this); 
    hiphop2.addItemListener(this); 
    hiphop3.addItemListener(this); 
    hiphop4.addItemListener(this); 

    list_card.add(card_pop,POP); 
    list_card.add(card_rock,ROCK); 
    list_card.add(card_jazz, JAZZ); 
    list_card.add(card_hiphop, HIPHOP); 

底部有一個按鈕「添加到購物車」。當它被點擊時,它會用購物車打開一個新框架,這就是我想要顯示所選歌曲的位置。

以下是事件處理代碼

public void itemStateChanged(ItemEvent e) 
{ 
CardLayout cl = (CardLayout)(list_card.getLayout()); 
if(e.getSource() == pop) 
cl.show(list_card, POP); 
if(e.getSource() == rock) 
cl.show(list_card,ROCK); 
if(e.getSource() == jazz) 
cl.show(list_card, JAZZ); 
if(e.getSource() == hiphop) 
cl.show(list_card, HIPHOP); 
} 

public void actionPerformed(ActionEvent e) 
{ 
if(e.getSource() == atc) //add to cart button 
    { 
    cart = new JFrame("Cart"); 
    cart.setVisible(true); 
    } 
} 

所以基本上,使用小程序查看或web瀏覽器中打開小程序,選擇每個流派下所需要的歌曲,單擊添加到購物車顯示與購物車的框架。

拷貝粘貼這麼多的代碼,對不起......

+0

您使用的是什麼GUI環境?我想有一種方法可以創建5個標籤並動態地在這些標籤中設置文本。如果您只需要<5首歌曲,您可以隱藏其他標籤。這是你在想什麼? – BlackVegetable

回答

0

怎麼是這樣的:

創建歌曲:

ArrayList<String> songsSelection = new ArrayList(); 
ArrayList<Song> songs = new ArrayList(); 

//add all songs you want 
songs.add(new Song(1, "Song 1")); 
songs.add(new Song(1, "Song 1")); 
songs.add(new Song(1, "Song 1")); 

創建anction以識別選擇,這裏您可以根據複選框狀態刪除或添加歌曲以供選擇

class SongAction implements ActionListener{ 
    public void actionPerformed(ActionEvent e) { 
     JCheckBox temp = (JCheckBox)e.getSource(); 
     if (temp.isSelected()) 
      songsSelection.add(temp.getName()); 
     else 
      songsSelection.remove(temp.getName()); 
     updateCart(); 
    } 
} 

創建複選框

for(Song s : songs){ 
    JCheckBox cb = new JCheckBox(s.getName()); 
    cb.addActionListener(new SongAction()); 
    frame.add(cb); 
} 
現在

可以更新選擇

public void updateCart(){ 
    panel.removeAll(); // clean the labels container 
    for(String name : songsSelection){ 
     panel.add(new JLable(name)) 
    } 
} 
+0

律複雜...請參閱編輯的問題! –

0

後您的購物車在我看來,這裏真正的問題是,你是否需要使用標籤?使用JTextArea來顯示哪些歌曲被選擇購買會不會同樣有效且相當容易?

+0

是的,我想應該會更容易!謝謝! 還有一個小小的好處...你能告訴我如何編碼項目監聽器來附加文本區域只有當複選框被選中時? –

+0

在我看來,你只是將偵聽器放在複選框上,並將其添加到textarea。最簡單的方法是設置一個單獨的偵聽器,當一個盒子被選中或未選中時觸發,而不是附加,完全重寫textarea的內容。這樣,您就不必擔心任何種類的排序算法 - 僅僅是幾個簡單的布爾運算符。 – Passage

+0

不認爲我真的明白你在說什麼......會給出完整的檢查清單嗎?我用這個代碼if(pop1.isSelected()== true); {item_list.append(「21 - Adele」+ new_line);} if(pop2.isSelected()== true){item_list.append(「D'elles - Celine Dion」+ new_line);} if(pop3.isSelected )== true){item_list.append(「Invincible-Michael Jackson」+ new_line);} if(pop4.isSelected()== true){item_list.append(「Speak Now - Taylor Swift」+ new_line);} 讓它與coaxing一起工作(不得不點擊加入購物車約3次)和幾個運行時異常 http://i46.tinypic.com/5dv13l.png –

相關問題