2013-04-26 123 views
0

我想寫一個非常簡單的21點遊戲。showConfirmDialog後關閉背景JFrame

這是應該顯示當前抽卡類:

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.*; 

public class ShowRandomCard { 
    JFrame f = new JFrame(); 
    JPanel p = new JPanel(); 

public void ShowUsARandomCard() { 
    f.setLayout(new BorderLayout()); 
    p.add(new JLabel("A Panel")); 
    f.add(p, BorderLayout.NORTH); 

    // Picture 
    BufferedImage myPicture = null; 
    try { 
     myPicture = ImageIO.read(new File("somepicture")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    JLabel picLabel = new JLabel(new ImageIcon(myPicture)); 
    f.add(picLabel,BorderLayout.NORTH); 

    // elements 

    f.pack(); 
    f.setVisible(true); 

    Blackjack jt = new Blackjack(); 
    jt.dialog(); 

} 

public void hideCards() { 
    f.setVisible(false); 
    f.remove(p); 
    f.dispose(); 
    f.repaint(); 
} 
} 

這是實際的遊戲類:

import static javax.swing.JOptionPane.*; 

public class Blackjack { 

    ShowRandomCard it = new ShowRandomCard(); 

    public void dialog() { 

     int answer2 = showConfirmDialog(null, "some message", "some title", 
       YES_NO_OPTION); 
     if (answer2 == YES_OPTION) { 
      garbageCollection(); 
      it.ShowUsARandomCard(); 
     if (answer2 == NO_OPTION || answer2 == CANCEL_OPTION) { 
      garbageCollection(); 
     // System.exit(0); 
     } 
     } 
    } 

public void garbageCollection() { 
    it.hideCards(); 
} 
} 

但持有的卡不消失的JPanel 。 任何幫助,將不勝感激。

+0

爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-04-26 17:28:17

+0

以及我已盡全力顯示只有必要的部分 – herecy 2013-04-26 17:30:43

+0

記得調用JFrame.redraw()後取出卡 – RuntimeError 2013-04-26 17:32:17

回答

3

當您從可見幀刪除組件的基本代碼是:

panel.remove(...); 
panel.revalidate(); 
panel.repaint(); 

然而,很少有一個很好的理由使用代碼這樣。相反,您應該使用Card Layout來隱藏/顯示面板。

方法名稱不以大寫字符開頭。 「GarbageCollection()」應該是GarbageCollection()

+0

不幸的是f.repaint();沒有效果。小組仍然停留。感謝您指出名稱慣例,忽略了它。 – herecy 2013-04-26 17:50:01

+0

重新驗證()是關鍵,但您又完全忽略了使用卡布局的正確解決方案。你還沒有發佈適合的SSCCE,所以我沒有更多的幫助。 – camickr 2013-04-26 17:51:57

+0

不需要更多的幫助,重新確認確實是關鍵。謝謝!順便說一句:已經更新了上面的代碼,只是爲了你;-)。 – herecy 2013-04-26 17:58:37