1

テキスト フィールドの値が常に正であることを確認するために、FocusListener を使用するアプリケーションを作成しました。ユーザーが負の値を入力し、[Tab] キーをクリックしてフォーカスをテキスト フィールドから移動すると、結果の値が正になるように値に -1 が乗算されます。しかし、アプリケーションを実行しても、テキスト フィールドは変化しませんでした。何が間違っていたのかわかりません。助けていただければ幸いです。

これが私のコードです:

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

public class AlwaysPositive extends JFrame implements FocusListener {
JTextField posField = new JTextField("30",5);

public AlwaysPositive() {
    super("AlwaysPositive");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel pane = new JPanel();
    JTextField posField = new JTextField("30",5);
    JButton ok= new JButton("ok");
    posField.addFocusListener(this);
    pane.add(posField);
    pane.add(ok);
    add(pane);
    setVisible(true);
}

public void focusLost(FocusEvent event) {
    try {
        float pos = Float.parseFloat(posField.getText());
        if (pos < 0) 
            pos = pos*-1;
        posField.setText("" + pos);
    } catch (NumberFormatException nfe) {
        posField.setText("0");
    }
}

public void focusGained(FocusEvent event) {
}

public static void main(String[] arguments) {
    AlwaysPositive ap = new AlwaysPositive();
}

}

4

2 に答える 2

1

メソッド内に同じ名前のオブジェクトを作成すると、リスナーは Class オブジェクトではなくメソッド オブジェクトに設定されます。

于 2013-10-24T22:53:47.613 に答える