3

JTextField小数点のコンマ (ドイツ語キーボード) を特定の s のポイントに再マップしたいと考えています。getInputMap()とを試してみましgetActionMapたが、これまでのところ何も機能しませんでした。これまでに得た最良の結果は、カンマがまったく機能しなかったことです。

入力マップを使用する方法があるはずだと思いますが、どのように?

以下は小さなプログラムの例です。コメントの場所に何を記入すればよいか、ヒントを教えていただけませんか? それとも、とにかくこれは完全に間違っていますか?

import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

public class KeyTest extends JFrame {

    private JTextField textField;

    public KeyTest() {
        textField = new JTextField();
        add(textField);

        InputMap map = textField.getInputMap();
        map.put(KeyStroke.getKeyStroke(','), /* what to do here? */);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                KeyTest test = new KeyTest();
                test.pack();
                test.setVisible(true);
            }
        });
    }
}

編集: おそらく、私の質問は十分に明確ではありませんでした。通常の数値で問題ありません。日付を入力するときのユーザー入力をより便利にしたいだけです。これらは"DD.MM.YYYY"ドイツの形式です。つまり、小数点ではなくコンマがあるため、数字キーパッドだけを使用して日付を入力することはできません。そのため、日付の入力に使用するテキスト フィールドのコンマをポイントに置き換えたいと考えています。

プレーンテキストと数値のすべての入力フィールドはすでに正常に機能しており、日付入力も機能しています。入力を簡単にしたいだけです。ちょうど昨日、Libreoffice で同様の機能に気付きました。数値キーパッド (私はドイツ語のキーボードを使用しています) のコンマが数値セル (私のロケールは英語に設定されています) で自動的に置き換えられますが、数値を含むセルでのみ置き換えられます。これは、入力時にも発生します。

4

5 に答える 5

3
  • JFormattedTextFieldまたはJSpinnerをNumberFormatterで使用する必要がありますが、プレーンなJTextFieldではありません。Locale

  • un_wantedとcharsをフィルタリングし、ドットを目的の小数点に変更するために、ではなくDocumentFilterを使用する2番目の方法があります。InputMaskwhitespacenon_numeric

  • JFormattedTextFieldまたはJSpinnerDocumentFilterからの出力を内部的に使用してASCII小数点区切り文字として保持することにより、ビューとモデル( )の違いのみがあり、変更されたグループ化(スペース)と区切り文字も返されます。 JavadotSwing DocumentDocumentFilter

于 2012-08-10T12:37:32.323 に答える
3

JFormattedTextField@MKorbelが示唆しているように、適切なを使用して提供できる可能性がありますLocale

JFormattedTextField field = new JFormattedTextField(
    new NumberFormatter(NumberFormat.getNumberInstance(Locale.UK)));
field.setValue(new Double(123.45));
于 2012-08-10T12:17:00.333 に答える
2

あなたが探しているのは「NumberFormat」です(http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html)

例:

NumberFormat english = NumberFormat.getInstance(Locale.ENGLISH); 
Number n = english.parse("0.123");   //english notation
NumberFormat german = NumberFormat.getInstance(Locale.GERMAN);
System.out.println(german.format(n.floatValue())); //output 0,123 (german notation)
于 2012-08-10T12:18:03.967 に答える
1

以下を使用します

textField.addKeyListener(new KeyListener(){

  public void keyTyped(KeyEvent e) {
    char c = e.getKeyChar();
     if (c== ',')
       e.setKeyChar('.');
  }
});
于 2012-08-10T13:20:36.943 に答える