2012-04-26 10 views
6

Nauczyłem się trochę o JavaFX 2, ale mam problem z edytowalną komórką tabeli, której nie mogę znaleźć. Aby zapisać wklejania w partii kodu I utworzeniu projektu, który zawiera tylko przykładowe Tableview z dokumentacji JavaFX: http://docs.oracle.com/javafx/2/ui_controls/table-view.htmJava FX 2 Edycja i skupianie komórek tabeli

Jeśli rozbieg ten kod widać to zachowanie:

  1. kliknięcie wiersza wybiera ten wiersz.
  2. Kliknięcie komórki w wybranym wierszu konwertuje komórkę do pola tekstowego, aby była gotowa do edycji.
  3. Kliknięcie w polu tekstowym umożliwia edycję treści.

Problem polega na tym, że trzy kliknięcia prowadzą do miejsca, w którym można edytować komórkę. To, co chciałbym osiągnąć, to to, kiedy pole tekstowe w utworzonym (np. Kroku 2) fokusie przełącza się bezpośrednio do pola tekstowego.

mój najlepszy przypuszczenie dotyczące sposobu osiągnięcia tego celu było dodanie textField.requestFocus() do końca metody startEditing():

@Override 
public void startEdit() { 
    super.startEdit(); 

    if (textField == null) { 
     createTextField(); 
    } 
    setGraphic(textField); 
    setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
    textField.selectAll(); 
    textField.requestFocus(); 
} 

ale to nie działa. Jeśli dodaję detektor aktywności do pola tekstowego, znajduję to, że dostaję fokus, ale potem znowu go tracę. Nakręcenie punktu przerwania w słuchaczu wydaje się wskazywać, że TableView skupia się ponownie przed wyświetleniem pola tekstowego.

Pytanie zatem brzmi: w jaki sposób ustawić ostrość pola tekstowego podczas edycji rozpoczyna?

Odpowiedz

8

mógłbyś zamienić linię textField.requestFocus(); z:

 Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 
       textField.requestFocus(); 
      } 
     }); 

i spróbuj ponownie.

+1

Dzięki Uluk, naprawiliśmy to. Patrząc na dokumentację dla runLatera, chociaż domyślam się, że to może się nie udać, ponieważ nie daje żadnej gwarancji, kiedy to się uruchomi - prawdopodobnie będzie działało, zanim stół odzyska skupienie. – wobblycogs

+0

Zgadzam się z wobblycogami, użyłem triku runlater, aby kilka razy poprosić o fokus i zawsze działało dla mnie, ale brak pewności, że nadal będzie działać, nie daje mi ciepłego, rozmytego czuję to. (Alternatywą jest użycie Osi czasu, aby przesunąć żądanie skupienia nawet w późniejszym czasie - ale to podejście ma swoje własne problemy). – jewelsea

Powiązane problemy