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:
- kliknięcie wiersza wybiera ten wiersz.
- Kliknięcie komórki w wybranym wierszu konwertuje komórkę do pola tekstowego, aby była gotowa do edycji.
- 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?
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
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