2016-07-31 130 views
0

我遇到了一個問題,當我單擊代碼中的JRadioButton時,我的交互輸出中出現大量紅線。該程序要求用戶選擇四個答案中的一個來回答「你最喜歡的水果是什麼?」。下面是從代碼的摘錄:JRadioButton無法在EventListener中投射到JButton

//constructor 
    public Form(){ 

    EventListener listener = new EventListener(); 

    private class EventListener implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 

    if ((JButton)e.getSource() == fruitButton) { 

    selectA = new JRadioButton("Apples"); 
    selectA.addActionListener(listener); 
    selectB = new JRadioButton("Bananas"); 
    selectB.addActionListener(listener); 
    selectC = new JRadioButton("Cherries"); 
    selectC.addActionListener(listener); 
    selectD = new JRadioButton("Other"); 
    selectD.addActionListener(listener); 

    if ((JButton)e.getSource() == quitButton) { 
    System.exit(1); 
    } 

    if (selectAButton.isSelected() || selectBButton.isSelected() || selectCButton.isSelected() || selectDButton.isSelected()) { 
    southPanel.add(submitButton); 
    } 
}} 

然而,當我運行的代碼時,我點擊選擇JRadioButtons我得到一個大量的紅線在交互的輸出,首先:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JRadioButton cannot be cast to javax.swing.JButton

我有JButtons在同一個事件監聽器中(例如有一個退出按鈕),但無論我做什麼,我似乎都無法在選擇單選按鈕後在底部添加提交按鈕。請幫忙!

+0

提供了'button'聲明 –

+1

你無條件地鑄造你的事件源JButton的完整代碼。當源是JRadioButton時,會導致ClassCastException。你必須首先查看instanceof,然後施放。 – garnulf

回答

0

檢查事件源的確是一個JButton你施放前:

if(e.getSource() instanceof JButton && (JButton)e.getSource() == quitButton) { 

      System.exit(1); 
    }