2013-04-12 2 views
1

У меня есть три разных JRadioButtons, которые все добавлены к одному JPanel. Когда я добавляю JPanel в JFrame, появляется только lvl3 JRadioButton. Если я прокомментирую эту строку, то ни одна из кнопок не появится. Есть ли что-то, что я делаю? или я должен использовать JRaduiButtonGroups?Invisible 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 и эта панель уже добавлена ​​в панели содержимого кадра. Повторное добавление радиокнопок снова вызовом метода getContentPane(). Метод add() в методе launchFrameG() заменит область содержимого фрейма, из-за чего ваша панель будет заменена. Добавьте в панель контента только последний добавленный компонент.

+0

Большое вам спасибо! Я не заметил, что добавил его дважды. У меня есть один вопрос: если я добавлю его в JRadioButtonList, то могу ли я удалить отдельные кнопки и добавить этот список? Спасибо за ответ так быстро, это был мой первый пост. – user2272549