2017-06-21 2 views
0

Je dois m'assurer que lorsque l'on appuie sur le bouton de démarrage, le cadre de jeu s'ouvre.Java - Bouton de démarrage et nouveau JFrame

Voici le menu:

enter image description here

C'est la classe contrôleur:

@Override 
public void actionPerformed(ActionEvent e) { 
    JRadioButton source = (JRadioButton)e.getSource(); 
    JButton sourceButton = (JButton)e.getSource(); 

    if(source.isSelected() && source.getText().equals("Custom")){ 
     MenuView.heightLabel.setEnabled(true); 
     MenuView.height.setEnabled(true); 

     MenuView.widthLabel.setEnabled(true); 
     MenuView.width.setEnabled(true); 

     MenuView.minesLabel.setEnabled(true); 
     MenuView.mines.setEnabled(true); 
    } 
    else{ 
     MenuView.heightLabel.setEnabled(false); 
     MenuView.height.setEnabled(false); 

     MenuView.widthLabel.setEnabled(false); 
     MenuView.width.setEnabled(false); 

     MenuView.minesLabel.setEnabled(false); 
     MenuView.mines.setEnabled(false); 
    } 

    if(source.getText().equals("Beginner")){ 
     if(sourceButton.getText().equals("Start Game")){ 
      MenuView.fullRandom = new FullRandomGrid(ROW_BEGINNER, COLUMN_BEGINNER, MINE_BEGINNER); 
      Frame frame = new Frame(MenuView.fullRandom); 
      frame.setSize(270, 380); 
      frame.setResizable(false); 
      frame.setVisible(true); 

     } 
    } 
} 

Le problème est que quand je presse Start Game J'ai cette exception:

Exception dans le fil "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JButton ne peut pas être jeté à javax.swing.JRadioButton

+0

Pouvez-vous publier la trace complète de la pile? –

+0

Pourquoi voudriez-vous que ** e.getSource() ** renvoie l'instance de ** JButton ** et ** JRadioButton ** aussi? JRadioButton n'a pas de relation ** d'héritage ** avec JButton, ce qui signifie que ** l'objet ** renvoyé par e.getSource() ne peut être qu'une instance ** JButton ** ou ** JRadioButton **, ce qui selon moi est JButton , parce que l'utilisateur a appuyé sur un JButton :) – ShayHaned

+0

* ".. nouveau JFrame .." * Voir [L'utilisation de plusieurs JFrames, bonne/mauvaise pratique?] (http://stackoverflow.com/q/9554636/418556) –

Répondre

2

Le problème est dans cette ligne:

JRadioButton source = (JRadioButton)e.getSource(); 

pour indiquer que Jetés le code a tenté de jeter un objet à une sous-classe dont il n'est pas une instance.

JRadioButton n'est pas une sous-classe de e.getSource(), donc un ClassCastException sera lancé.


JRadioButton source = (JRadioButton)e.getSource(); 
JButton sourceButton = (JButton)e.getSource(); 

Comment e.getSource() peut être lancé dans les deux, pas de relation parent-enfant.

+0

Comment puis-je résoudre le problème? – nomeNano

+0

vous avez la référence de votre 'JRadioButton' globalement? Si ce n'est pas le cas, utilisez-le dans votre méthode. – Aryan

+0

Pouvez-vous me montrer comment je devrais modifier le code? – nomeNano

0

La question est conforme JRadioButton source = (JRadioButton)e.getSource(); - vous appuyez sur l'objet JButton, ce qui provoque l'événement et vous êtes casting mauvais type de DButton à JRadioButton.