У меня есть таблица, и мне нужно добавить контекстное меню для рядов. Проблема в том, что контекстное меню показано также для пустых рядов. Чтобы исправить его, я удаляю и добавляю контекстное меню, используя слушатель на пустое свойство. Но с учетом того, что виртуальные строки обновляются очень часто, я не уверен, что это эффективное решение. < /P>
Это мой код: < /p>
У меня есть таблица, и мне нужно добавить контекстное меню для рядов. Проблема в том, что контекстное меню показано также для пустых рядов. Чтобы исправить его, я удаляю и добавляю контекстное меню, используя слушатель на пустое свойство. Но с учетом того, что виртуальные строки обновляются очень часто, я не уверен, что это эффективное решение. < /P> Это мой код: < /p> [code]public class NewMain1 extends Application {
public static class Person { private final StringProperty firstName; private final StringProperty lastName;
public Person(String firstName, String lastName) { this.firstName = new SimpleStringProperty(firstName); this.lastName = new SimpleStringProperty(lastName); }
public StringProperty firstNameProperty() { return firstName; } public StringProperty lastNameProperty() { return lastName; } }
@Override public void start(Stage primaryStage) { TableView tableView = new TableView(); tableView.setEditable(true);
TableColumn firstNameCol = new TableColumn("First Name"); firstNameCol.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty()); firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
TableColumn lastNameCol = new TableColumn("Last Name"); lastNameCol.setCellValueFactory(cellData -> cellData.getValue().lastNameProperty());
ObservableList data = FXCollections.observableArrayList( new Person("John", "Smith"), new Person("Emily", "Johnson"), new Person("Michael", "Williams"), new Person("Sarah", "Brown") ); tableView.setItems(data);
tableView.setRowFactory(tv -> { TableRow row = new TableRow(); var contextMenu = new ContextMenu(new MenuItem("Show Salary")); row.emptyProperty().addListener((ov, oldV, newV) -> { if (newV) { row.setContextMenu(null); } else { row.setContextMenu(contextMenu); } }); return row; });
VBox root = new VBox(tableView); Scene scene = new Scene(root, 400, 300); primaryStage.setTitle("Editable Names Table"); primaryStage.setScene(scene); primaryStage.show(); }
public static void main(String[] args) { launch(args); } } [/code] Может ли кто -нибудь сказать, есть ли лучшее решение не показывать контекстное меню для пустых рядов?
У меня есть таблица, и мне нужно добавить контекстное меню для рядов. Проблема в том, что контекстное меню показано также для пустых рядов. Чтобы исправить его, я удаляю и добавляю контекстное меню, используя слушатель на пустое свойство. Но с...
У меня есть таблица, и мне нужно добавить контекстное меню для рядов. Проблема в том, что контекстное меню показано также для пустых рядов. Чтобы исправить его, я удаляю и добавляю контекстное меню, используя слушатель на пустое свойство. Но с...
У меня проблемы с использованием Javafx в проекте Uni, и я просто хожу по кругу. Я новичок в Java, Javafx и Intellij, так что любая помощь была бы очень оценена! У меня было много проблем, заставляя это работать, но я наконец -то это понял. Сейчас я...
В документации говорится: «Чтобы добавлять и удалять меню из строки меню с помощью системы главного меню, переопределите buildMenu(with:) в делегате вашего приложения. Чтобы создать контекстное меню с использованием контекстной системы,...
Добавить контекстное меню Windows как Merge PDF При выборе нескольких файлов PDF. После добавления отображение только в том случае, если выбраны несколько файлов PDF. Когда пользователь нажимает на «Merge PDF», начинается как один экземпляр...