この記事とこの質問を読んだ後、私は 2 つの組み合わせを作成しようとしました: 常に正しい位置にスラッシュを表示し、Date オブジェクトを自動的に解析する JFormattedTextField です。
私が思いついたコードは次のとおりです。
private DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
textField_DaRiassuntoIncassi = new JFormattedTextField(df);
textField_ARiassuntoIncassi = new JFormattedTextField(df);
textField_DaScadenze = new JFormattedTextField(df);
textField_AScadenze = new JFormattedTextField(df);
textField_DaRiassuntoIncassi.setColumns(10);
textField_ARiassuntoIncassi .setColumns(10);
textField_DaScadenze .setColumns(10);
textField_AScadenze .setColumns(10);
try
{
MaskFormatter dateMask = new MaskFormatter("##/##/####");
dateMask.install(textField_DaRiassuntoIncassi);
dateMask.install(textField_ARiassuntoIncassi);
dateMask.install(textField_DaScadenze);
dateMask.install(textField_AScadenze);
}
catch(ParseException ex)
{
ex.printStackTrace();
}
問題は、テキストフィールドをクリックして値を入力すると、入力時に2つのスラッシュが移動し、代わりに固定したままにしたいことです(キーボードのキー「挿入」が押されたときのように) . MaskFormatter をコンストラクターに入れると問題は解決しますが、「99/00/9874」などの任意の数値をテキストフィールドに入力でき、コンポーネントはそれが正しい値であると教えてくれます。 SimpleDateFormat をプラグインする場所。
私の最後の手段は、MaskFormatter を JFormattedTextField コンストラクターに入れ、getText() メソッドでテキストを取得し、DateFormat で日付を解析してみて、エラーが発生した場合は何かをすることですが、これを行うには賢い方法があると思います。メソッドを使ってみた
textField_AScadenze.setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(new SimpleDateFormat("dd/MM/yyyy"))));
しかし、何も挿入せずにクリックするとすぐに、スラッシュが消えます。助けてください。ありがとうございました