2016-04-29 6 views
-1

私はJRadioButtonsを学習しています。なぜそれがチュートリアルで働いているのか分かりません。誰かがそれを見てみることができますか?私はこのコードが(JRadioButtonsの新機能では)動作しない理由を理解していません

メインクラス:

import java.awt.*; 
import javax.swing.*; 

public class Calculator extends JPanel{ 
    private static final long serialVersionUID = 1L; 

    public static void main(String[] args){ 
     Screen screen = new Screen(); 
     screen.setVisible(true); 
    } 

} 

ここでは、画面のクラスである:私の新しいJavaヘッドで

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JTextArea; 

public class Screen extends JFrame implements ActionListener{ 
    private static final long serialVersionUID = 1L; 

    JRadioButton b1, b2; 
    ButtonGroup group; 
    JTextArea tb; 

    public Screen(){ 
     super("First GUI"); 
     setSize(600,600); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 

     JPanel p1 = new JPanel(); 

     JTextArea tb = new JTextArea("Text Area"); 

     group = new ButtonGroup(); 
     group.add(b1); 
     group.add(b2); 

     b1 = new JRadioButton("Hello"); 
     b1.setActionCommand("HELLO!"); 
     b1.addActionListener(this); 

     b2 = new JRadioButton("Goodbye"); 
     b2.setActionCommand("Goodbye! =)"); 
     b2.addActionListener(this); 

     p1.add(b1); 
     p1.add(b2); 
     p1.add(tb); 

     add(p1); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // TODO Auto-generated method stub 
     tb.setText(e.getActionCommand()); 
    } 
} 

これは完璧に動作するはずです。私はボタンを初期化し、グループを初期化します。ボタンの1つをクリックするとエラーが発生します:AWT-EventQueue-0私はそれが何を意味するのか分からないので、私はこの問題を解決する方法を知らない。

+0

ラジオボタンをグループに追加する前に、ラジオボタンをインスタンス化してみてください。 – Zymus

+0

これは問題ではありませんが、これを指摘してくれてありがとう! –

+0

あなたの質問のタイトルを改善してください。あなたの*苦境ではなくあなたの*問題*を要約するために有益であるはずです。あなたのコードは、最初に適切ではないと仮定してください。 –

答えて

4

同じ変数を2回宣言しました。グローバルスコープとローカルスコープで同じ変数(JTextArea tb)を宣言すると、別のオブジェクトになります。ローカルスコープ内の宣言をScreen()コンストラクタから削除して動作させます。 まだグローバルスコープで初期化されていないため、あなたの現在のコード、tbのこの

tb = new JTextArea("Text Area"); 

代わりの

JTextArea tb = new JTextArea("Text Area"); 

を試してみてください。

+0

私は馬鹿のように感じる!どうもありがとうございます!私ができる時をチェック! –

関連する問題