1

変数の定義と使用に関する素人の質問:

ユーザーの入力を取得してテキスト ファイルに保存する Java GUI を作成する必要があります。ただし、この書き込みは Actionlistener クラス内で行う必要があります (つまり、ユーザーがボタンをクリックすると、テキスト ファイルが作成されて保存されます)。これは、あるクラス (public クラス) で変数を定義し、別のクラス (Actionlistener を定義するクラス) で使用する必要があることを意味します。

これどうやってするの?グローバル変数が唯一の方法ですか?

私のコードでは、最初に 'textfield' を JTextField として定義し、次にそれを ('text' として) 読み取って ('text.txt' に) 保存します。

import javax.swing.*;
//...
import java.io.BufferedWriter;

public class Runcommand33
{
  public static void main(String[] args)
  {
final JFrame frame = new JFrame("Change Backlight");
   // ...
   // define frames, panels, buttons and positions
    JTextField textfield = new JTextField();textfield.setBounds(35,20,160,30);
    panel.add(textfield);
    frame.setVisible(true);
    button.addActionListener(new ButtonHandler());
  }
}

    class ButtonHandler implements ActionListener{
    public void actionPerformed(ActionEvent event){
    String text = textfield.getText();
        textfield.setText("");
        new BufferedWriter(new FileWriter("text.txt")).write(text).newLine().close();

    // Afterwards 'text' is needed to run a command
              }
            }

コンパイルすると、

Runcommand33.java:45: error: cannot find symbol
                String text = textfield.getText();
                              ^
  symbol:   variable textfield
  location: class ButtonHandler

行なしString text = to new BufferedWriterコードはコンパイルされます。

このGet変数の提案を他のクラスで試したことに注意してください。これは 、 別のクラスの関数であるクラスの変数にアクセスするにはどうすればよいですか? しかし、それらは機能しませんでした。

助言がありますか?

4

3 に答える 3

1

匿名の内部クラスを使用して、textfield変数を作成するのはどうですかfinal:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event){ 
        String text = textfield.getText();
        textfield.setText("");
        new BufferedWriter(new FileWriter("text.txt")).write(text).newLine().close();

       // Afterwards 'text' is needed to run a command              
    }
});

textfieldasを宣言する必要があることに注意してくださいfinal

final JTextField textfield = new JTextField();
于 2013-08-06T21:42:37.270 に答える
1

これをデザインの観点から見てみましょうButtonHandler。少し一般的すぎるように聞こえます。ボタンのクリックはどのように「処理」されますか? ああ、それはテキストフィールドの内容をファイルに保存するので、「TextFieldSaver」と呼ばれるべきです(またはできればそれほど不自由なものではありません)。

さて、TextFieldSaver には保存するテキスト フィールドが必要ですよね?したがって、テキスト フィールドを保持するメンバー変数を追加し、メイン クラスで作成されたテキスト フィールドをコンストラクターを介して渡します。

    button.addActionListener(new TextFieldSaver(textfield));

....

class TextFieldSaver implements ActionListener {
    JTextField textfield;
    public TextFieldSaver(JTextField toBeSaved) {
        textfield = toBeSaved;
    }
    public void actionPerformed(ActionEvent event) {
        String text = textfield.getText();
        textfield.setText("");
        new BufferedWriter(new FileWriter("text.txt")).write(text).newLine().close();
    }
}

これが唯一の方法ではなく、必ずしも最良の方法でもありませんが、適切な名前を使用することで解決策が示される場合があることを示してくれることを願っています。

于 2013-08-06T21:50:50.380 に答える
0

Javaにはグローバル変数がありません。各クラスには、いくつかのパブリック フィールドを含めることができます。他のクラスがそれらにアクセスする可能性があります

次のように使用できます。

class A{
    public String text;
}

class B{
    public static void main(String []args){
        A a= new A();
        System.out.println(a.text);
    }
}
于 2013-08-06T21:47:29.660 に答える