2016-09-22 2 views
1

Ich habe einige TextFieldTableCell, die für Double Datentyp Werte sind. Ich möchte sie bestätigen. Wenn der Benutzer falschen Datentyp als Eingabe geben oder das Feld leer bleiben, möchte ich, dass TextFieldTableCell alsErstellen einer Gültigkeitsprüfung für TextFieldTableCell in JavaFX

Hintergrundfarbe Yello

Textartfarbe Red

Am markieren Ende der erfolgreichen Validierung möchte ich das TextFieldTableCell wieder normal machen.

Wie kann ich das erreichen?

Antwort

1

Nun könnte man mit soo vielen Möglichkeiten zu erreichen, und die so viele Möglichkeiten haben mit der Art und Weise zu tun Sie es in den TableCell implementieren, aber es wird in erster Linie davon abhängig sein, die DataHolderObject Sie mit den virtualization

zu helfen, verwenden

Um dies zu tun müssen Sie Ihre TableCell 's updateItem(Object,boolean) erstellen, um die Aktualisierung der Zelle in Bezug auf Stile usw. zu implementieren, und es sollte in Bezug auf Ihre updateSelected(boolean) sein, obwohl man die andere anruft, oder lassen Sie die beiden und Verwenden Sie updateIndex() so etwas wie das für Ihre DataHolderclass

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 
} 

jetzt in der Zelle, in einem dieser genannten Methoden Sie einen Scheck für Ihren Artikel hinzufügen, zum Beispiel

@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 
     } 
    } 

und dann in Ihrem StringConverter Sie verwenden, wird zu prüfen, ob Ihr Text gültig ist Grund Sie, ich fühle, dass Sie den StringConverter verwenden sollten ist, dass es die multiple Anrufe update...() empfangen kann, diese Methoden ruft soo viele Male ist nicht cool, um eine lange viel Arbeit dort zu setzen, könnte Ihre Zelle langsam aussehen, so dass es besser Sie es setzen hier zum Beispiel

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(); 
      } 
     }); 

Sie können auch Filter filtern, wenn die Prüfung aufgerufen werden soll, ob eine Aktualisierung aufgerufen oder eine explizite Änderung vorgenommen wird. zum Beispiel

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(); 
      } 
     }); 

Hier ist ein full demo snippet

Demo Vorschau enter image description here

Hoffe, es hilft.

+1

Hoffnung? Es war sehr hilfreich. Ich danke dir sehr. : D –

Verwandte Themen