2016-10-10 3 views
-2

名前、姓、性別、身長などを尋ねるフォームを作成しています... 整合性チェックを行うためにkeyTypedアクションハンドラを追加しました。(名前のみの文字、年齢の最大2つの数字など)JTextFieldの値を実際の値に一致するように更新するにはどうすればよいですか?

チェッカーは機能しますが、フォームに表示されている値が実際の値と一致しません。たとえば、高さが '1.333'(メートル)と書かれています。 1.33のような値しか受け付けないユーザー

だから私は、これは私が

を試してきたものである私は、TextFieldに1.333を記述する場合、保存された実際の値は1.33である

formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4)); 

を使用したが、TextFieldの

で1.333滞在

formattedTextField = new JFormattedTextField(); 
    formattedTextField.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyTyped(KeyEvent arg0) { 
      String re1="^([+-]?\\d*\\.?\\d*)$"; 
      System.out.println(formattedTextField.getText().matches(re1)); 
      if(formattedTextField.getText().length() >= 1 && formattedTextField.getText().matches(re1) == true) 
      {      

       if(formattedTextField.getText().length() >= 3) 
       { 
        final BalloonTip balloonTip = new BalloonTip(
          formattedTextField, 
          new JLabel("<html>Solo se aceptan valores de altura, como 1.66, 1.76, 1.88, etc..</html>"), 
          style, 
          BalloonTip.Orientation.LEFT_ABOVE, 
          BalloonTip.AttachLocation.ALIGNED, 
          20, 10, 
          false 
         ); 
        TimingUtils.showTimedBalloon(balloonTip, 4500); 
        formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4)); 



       } 
      } 

     } 
    }); 
contentPane.add(formattedTextField, "cell 2 9,growx,aligny center"); 

Example

+4

で新たな価値をcomprare必要39864104/how-to-add-a-button-to-two-values)、有効な[mcve]を作成して投稿してください。これはあなたのプログラム全体ではなく、私たちにとってあなたの問題を示す非常に簡単な簡単なプログラムです。 –

+0

そして、SwingテキストコンポーネントでKeyListenerを使用することは決してありません。より良い回答が必要な場合は、再度質問を改善してください。 –

答えて

2

これを試してみてください。 のCre 3つのグローバル変数食べた:

private String oldValue; 
private final Pattern pattern = Pattern.compile("^\\d+\\.?\\d{0,2}$"); 
private Matcher matcher; 

をそして、あなたは古い値を保存して、[前の質問](http://stackoverflow.com/questions/へのコメントを1として正規表現

formattedTextField.addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent evt) { 
      oldValue = formattedTextField.getText(); 
    } 

    public void keyReleased(KeyEvent evt) { 
     matcher = pattern.matcher(formattedTextField.getText()); 
     if(!matcher.matches()){ 
      formattedTextField.setText(oldValue); 
     } 
    } 
} 
関連する問題