2013-04-12 35 views
1

我有三個不同的JRadioButtons都被添加到一個JPanel。當我將JPanel添加到JFrame中時,只有lvl3 JRadioButton顯示出來。如果我將該行註釋掉,則不顯示任何按鈕。有什麼我在幹嗎?或者我應該使用JRaduiButtonGroups?隱形JRadioButtons

import javax.swing.*; 
import java.awt.*; 
import javax.swing.event.*; 
import java.awt.event.*; 
import java.util.Timer; 


public class CastleDefenders { 
static Timer timer; 
Toolkit tlkt; 
private JMenuBar mb2 = new JMenuBar(); 
private static boolean startGame = false; 
private static JFrame f = new JFrame("Castle Defenders"); 
private static JFrame g = new JFrame("Castle Defenders"); 
private JRadioButton lvl1 = new JRadioButton("Easy"); 
private JRadioButton lvl2 = new JRadioButton("Normal"); 
private JRadioButton lvl3 = new JRadioButton("Hard"); 
private JPanel pnl = new JPanel(); 
private JTextField lbl = new JTextField("Welcome to Castle Defenders!"); 
private JButton btn = new JButton("START"); 
private JMenuBar mb = new JMenuBar(); 
private JMenu mnuFile = new JMenu("File"); 
private JPanel pnl2 = new JPanel(); 
private JMenuItem mnuItemQuit = new JMenuItem("Quit"); 
private JMenu mnuHelp = new JMenu("Help"); 
private JMenuItem mnuItemAbout = new JMenuItem("About"); 

public CastleDefenders(){ 
    lvl1.setToolTipText("Play the game on Easy"); 
    lvl2.setToolTipText("Play the game on Normal"); 
    lvl3.setToolTipText("Play the game on Hard"); 
    pnl2.add(lvl1); 
    pnl2.add(lvl2); 
    pnl2.add(lvl3); 
    tlkt = Toolkit.getDefaultToolkit(); 
    timer = new Timer(); 
    pnl2.setBounds(50, 5, 1, 10); 
    btn.setBounds(220, 240, 5, 1); 
    f.setJMenuBar(mb2); 
    g.setJMenuBar(mb2); 
    mnuFile.add(mnuItemQuit); 
    mnuHelp.add(mnuItemAbout); 
    mb.add(mnuFile); 
    mb.add(mnuHelp); 
    mb2.add(mnuFile); 
    mb2.add(mnuHelp); 
    pnl.add(btn); 
    pnl2.add(lbl); 
    lbl.setBounds(0, 240, 10, 2); 
    lbl.setEditable(false); 
    f.getContentPane().setLayout(new BorderLayout()); 
    f.getContentPane().add(pnl, BorderLayout.CENTER);  
    f.addWindowListener(new ListenCloseWdw()); 
    g.getContentPane().setLayout(new BorderLayout()); 
    g.getContentPane().add(pnl2); 
    g.addWindowListener(new ListenCloseWdw()); 
    mnuItemAbout.addActionListener(new GetAboutInfo());  
    btn.addActionListener(new GetButtonClick());  
    mnuItemQuit.addActionListener(new ListenMenuQuit()); 


} 

public class GetButtonClick implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     startGame = true; 
     //JOptionPane.showMessageDialog(null, "WIP"); 
    } 
} 
public class GetAboutInfo implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     JOptionPane.showMessageDialog(null, "Made By Byron Lathi"); 
    } 
} 
public class ListenCloseWdw extends WindowAdapter{ 
    public void windowClosing(WindowEvent e) { 
     System.exit(0); 
    } 
} 
public class ListenMenuQuit implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     System.exit(0); 
    } 
} 
public void launchFrameF(){ 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.pack(); 
    f.setBounds(0, 0, 640, 680); 
} 
public void launchFrameG(){ 
    g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    g.pack(); 
    g.setBounds(0, 0, 640, 680); 
    g.getContentPane().add(lvl1).setBounds(1, 1, 1, 1); 
    g.getContentPane().add(lvl2).setBounds(2, 2, 1, 1); 
    g.getContentPane().add(lvl3).setBounds(3, 3, 1/2, 1/2); 

} 
public static void main(String args[]) { 
    final CastleDefenders main = new CastleDefenders(); 
    main.launchFrameF(); 
    f.setVisible(true); 
    do { 
     System.out.print(""); 
    }while(startGame == false); 
    if (startGame == true){ 
     JOptionPane.showMessageDialog(null, "We've come so far..."); 
     f.setVisible(false); 
     main.launchFrameG(); 
     g.setVisible(true); 
    } 

} 

}

回答

1

在你的代碼已經在PNL2的JPanel的單選按鈕,這個面板已添加到畫面的內容窗格。通過在launchFrameG()方法中調用getContentPane()。add()方法再次重新添加單選按鈕來替換該框架的內容窗格,這會讓您的面板被替換。僅添加最後添加的組件保留在內容窗格中。

+0

非常感謝!我沒有注意到我加了兩次。我有一個問題:如果我將它添加到JRadioButtonList,那麼我可以刪除單個按鈕並添加一個列表嗎?謝謝你的回覆,這是我的第一篇文章。 – user2272549