2012-06-27 42 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 –

相关问题