2016-09-22 5 views
1

TextFieldTableCellは、Doubleのデータ型値を取得するためのものです。私はそれらを検証したい。ユーザーが入力として誤ったデータ型を与えるか、または空のそのフィールドを維持する場合、私はJavaFXでTextFieldTableCellの有効性チェックを作成する

背景色YELLO

テキストスタイルカラーレッド

としてTextFieldTableCellことをマークしたいです検証の成功の終わり、私は再びTextFieldTableCellを正常にしたい。

どうすればいいですか?

答えて

1

さてあなたは洙多くの方法、および非常に多くの方法で達成できるが、あなたがTableCellでそれを実装する方法に関係していますが、それはあなたがvirtualization

を支援するために使用 DataHolder Objectに主に依存することになります

TableCellupdateItem(Object,boolean)を作成して、スタイルなどのセルの更新を実装する必要があります。もう1つを呼び出す場合でもupdateSelected(boolean)と関連付ける必要があります。 updateIndex()あなたのためにこのようなものを使用してくださいDataHolderclass

あなたが例えば

@Override 
    public void updateItem(CellDataHolder item, boolean empty) { 
     super.updateItem(item, empty); 
     if(empty){return;} 
     setText(item.value);//set your text 
     if(item.badMatch){//check if the text fits. 
      setStyle(wrongFormatStyle);//this is where you set your bad style 
     }else{ 
      setStyle(normalyStyle);//the style you want 
     } 
    } 

をあなたの項目のチェックを追加して、あなたのStringConverterで、あなたのテキストが有効であるかどうかを確認するためにそれを使用します述べたもののいずれかの方法であなたのセルで今

private class CellDataHolder { 

    public CellDataHolder (String a){ 
     value = a; 
    } 

    String value = "empty"; //this being the text to show 
    boolean badMatch = false; //this being the flag to index whether the 
    //text matches your preference 
} 

、私はあなたがStringConverterを使用する必要があると感じる理由は、複数の呼び出しを減らすことができることですupdate...()は、それらのメソッドが何度も呼ばれていますが、多くの時間は、そこに長い間多くの作業を置くためにクールではありませんあなたのセルは、ここに、たとえば

setConverter(new StringConverter<CellDataHolder>() { 
      @Override 
      public String toString(CellDataHolder arg0) { 
        arg0.badMatch = 
          arg0.value.matches(".*[a-zA-Z]+.*");//here you add your algorithm 
       return arg0.value; 
      } 

      @Override 
      public CellDataHolder fromString(String arg0) { 
       getItem().value = arg0; 
       return getItem(); 
      } 
     }); 

また、リフレッシュが呼び出されたかどうか、または明示的な編集が行われているかどうかにかかわらず、チェックを呼び出すときのフィルタの仕方をフィルタリングすることもできます。例えばここで

setConverter(new StringConverter<CellDataHolder>() { 
      @Override 
      public String toString(CellDataHolder arg0) { 
       if(isEditing()){ //whether it is an edit 
        arg0.badMatch = 
          arg0.value.matches(".*[a-zA-Z]+.*");//here you add your algorithm 
       } 
       return arg0.value; 
      } 

      @Override 
      public CellDataHolder fromString(String arg0) { 
       getItem().value = arg0; 
       return getItem(); 
      } 
     }); 

full demo snippet

デモプレビューで enter image description here

はそれがお役に立てば幸いです。

+1

希望ですか?とても助けになりました。どうもありがとうございます。 :D –

関連する問題