У меня есть checkfx CheckListView (даже такая же проблема с элементом управления ListView javafx), где я хочу отображать RadioButtons вместо CheckBox. Таким образом, я реализовал пользовательскую фабрику ячеек, обратившись за помощью из нескольких учебных пособий javafx, и он работает. Проблема в том, что я выбрал первый переключатель и немного прокрутился вниз, чтобы некоторые из моих верхних переключателей были прокручены и теперь не видны. Затем снова я прокрутил вверх, теперь выбор уже ушел.javafx ListView с пользовательской фабрикой ячеек, не сохраняющей выбранную ячейку
Я отлаживаю код, понимая, что новые ячейки создаются каждый раз, и это приводит к этой проблеме, но, к сожалению, не может найти решение.
У меня есть пример кода, который я получил из переполнения стека, который имеет ту же проблему.
package application;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class RadioButtonListView extends Application {
public static final ObservableList names = FXCollections.observableArrayList();
private ToggleGroup group = new ToggleGroup();
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("List View Sample");
final ListView listView = new ListView();
listView.setPrefSize(200, 250);
listView.setEditable(true);
names.addAll("Adam", "Alex", "Alfred", "Albert", "Brenda", "Connie", "Derek", "Donny", "Lynne", "Myrtle", "Rose", "Rudolph", "Tony", "Trudy", "Williams", "Zach");
listView.setItems(names);
listView.setCellFactory(param -> new RadioListCell());
StackPane root = new StackPane();
root.getChildren().add(listView);
primaryStage.setScene(new Scene(root, 200, 250));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private class RadioListCell extends ListCell<String> {
@Override
public void updateItem(String obj, boolean empty) {
super.updateItem(obj, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
RadioButton radioButton = new RadioButton(obj);
radioButton.setToggleGroup(group);
// Add Listeners if any
setGraphic(radioButton);
}
}
}
}
Пожалуйста нужно ур помочь в этом. (Я использую JavaFX 8)
Вы спасли мой день. Большое спасибо. На самом деле я попробовал то же самое, но как-то потерял в середине. Я хочу довести это до вашего сведения. Ваше решение работает, но если я выбираю первый переключатель, он выбирается, а также загорается 11-й переключатель (если отображаются 10 кнопок). (не выбран, но становится фокусом). На данный момент это не проблема. Еще раз спасибо. –
http://imgur.com/EnfGCcP –
@SaravanaKumar Я могу понять, почему это произойдет, но я не могу воспроизвести его надежно. Выбор/фокусировка в ячейках - это непростая задача. –