【发布时间】:2016-04-07 00:57:51
【问题描述】:
我创建了一个 JButton,如果我点击它,就会显示一张卡片。每次我点击这个按钮,应该会出现下一张同花色的牌,并且这个过程应该继续进行,直到所有 13 张同花色的牌都被展示出来。我在 JLabel 的 ImageIcon 上以图片的形式显示卡片。问题是,如果我想在同一位置显示所有卡片,第一张卡片不会从其位置移除,将其余 12 张卡片隐藏在其下方。这意味着应该显示的每张新卡都属于其先例卡。我试图通过使用 frame.remove(mylabel); 从 JLabel 中删除先例卡。方法。但它没有帮助。此外,如果我更改 setBound() 方法中的坐标,则会显示卡片。但我想在显示第一张卡片的同一位置显示卡片。我已经使用计数器切换到下一张卡。每次显示一张卡片,它都会增加计数器变量,最终切换到下一张卡片。 请指导我如何移除前一张卡片以显示下一张卡片。我已经在 ActionListener 方法中使用了我所有的卡片显示逻辑。 JFrame 和 JButton 都在这个 ActinListener 方法之外声明。我的代码如下:
my_btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ImageIcon pic = new ImageIcon();
JLabel lbl = new JLabel();
if(counter == 0) {
pic = new ImageIcon(c1);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 1) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c2);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 2) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c3);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 3) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c4);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 4) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c5);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 5) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c6);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 6) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c7);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 7) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c8);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 8) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c9);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 9) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(c10);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 10) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(cj);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 11) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(cq);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else if(counter == 12) {
frame.remove(lbl);
lbl.setVisible(false);
pic = new ImageIcon(ck);
lbl = new JLabel(pic);
frame.add(lbl);
lbl.setBounds(200, 100, 100, 100);
lbl.setVisible(true);
counter++;
}
else {
frame.remove(lbl);
lbl.setVisible(false);
JOptionPane.showMessageDialog(frame, "Card deck ends.");
}
}
});
【问题讨论】: