2017-10-03 11 views
0

ActionListenerを使用して値を格納するのに問題があります。私はかなりJavaに慣れていないし、クラスとサブクラスのプログラミング方法に100%自信がない。JTextFieldから値を格納するときにJavaのフィールドを解決できません

import java.ActionEvent; 
import javaActionListener; 
import javax.swing JButton; 
import javax.swing JPanel; 
import javax.swing.JTextField; 

public class Trial extends JPanel implements Action Listener { 

    private static final long serialVersionUID = 1L; 

    public Trial() { 
     setFrame(); 
    } 

    public void setFrame(){ 

     JFrame frame = new JFrame("Trial"); 
     JPanel panel = new JPanel(); 
     JTextField field = new JTextField(10); 
     JButton button = new JButton("Enter"); 
     button.addActionListener(this); 

     panel.add(field); 
     panel.add(button); 

     frame.add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Trial(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     String s = field.getText(); 
     System.out.prinln("Button is pressed"); 
    } 
} 

これがそうである理由フィールドは、actionPerformed内部で定義されていませんか? ActionEventを使って遊んだところ、actionPerformed関数の外の変数には渡せません。だから私はこれをどうやってやるの? setFrame()を自分のクラスに移動する必要がありますか?

+0

「試行」はなぜ「JPanel」を拡張しますか?それがそれをするのは完全に不必要なようです。 –

+0

コードは元のコードのスニペットに過ぎません。私はちょうど質問のために必要なコード行を取った。 –

答えて

0

問題の原因は、可変フィールドの範囲にあります。

Javaでは、変数のスコープは、定義されているコードブロックによって設定されます。あなたのJTextFieldフィールドはsetFrameメソッド内で宣言されています。つまり、変数はsetFrameメソッド内でのみ表示されます。

フィールド変数をactionPerformedメソッドでアクセスできるように、クラス全体で表示する場合は、インスタンス変数にすることができます。

上記のコードで十分に説明されていれば、ご質問ください、私は詳しく説明します。

0

あなたのsetFrame()メソッドはフィールドを作成して初期化しますが、別のメソッドではその特定のプロパティを持つ特定のオブジェクトにアクセスする手段がありません。いずれかの方法の外に-certain-オブジェクトを宣言したとき、それは任意のメソッドは、この-certain-オブジェクトにアクセスして変更(または取得)可能性からプロパティ/メソッドを意味します

public class Trial extends JPanel implements Action Listener { 

    JTextField field; 

    ..// omitted 

    public void setFrame() 
    { 
     JFrame frame = new JFrame("Trial"); 
     JPanel panel = new JPanel(); 
     field = new JTextField(10); 

    .. //omitted 

はこれを試してみてください。

関連する問題