ComboBox in einem tableview cell in JavaFX
Ich versuche, ein hinzufügen einer Combo Box
zu meinem Table View
:
Grundsätzlich habe ich eine Klasse namens TableViewTest, speichert einen Namen und eine Beschreibung, ich kann Anzeige diese Namen und Beschreibungen in einem Table View
keine Mühe, aber was ich will zu tun ist, fügen Sie eine Dritte Spalte mit jeder Zelle mit einem Combo Box
so dass der Benutzer kann wählen Sie eines aus einer Anzahl von Optionen für jede person.
Bisher habe ich erstellt eine ObservableList
Typ String
mit einige Werte und Sie in eine ComboBox
Objekt. Kennt jemand eine Möglichkeit für mich, um dieses Combo Box
auf den Tisch?
Bedenken Sie auch dieser code ist ziemlich unruhig und ich bin nur versuchen, etwas zu arbeiten, und ich werde Refactorings, die code zu einem späteren Zeitpunkt.
ObservableList<TableViewTest> products = FXCollections.observableArrayList();
for(int i = 0; i < b.length; i++){
//random String values
products.add(new TableViewTest(b[i], a[i]));
}
ObservableList<String> options = FXCollections.observableArrayList(
"1",
"2",
"3"
);
final ComboBox comboBox = new ComboBox(options);
TableColumn<TableViewTest, String> nameColumn = new TableColumn<> ("Name");
nameColumn.setMinWidth(200);
nameColumn.setCellValueFactory(new PropertyValueFactory<TableViewTest, String>("name"));
//price Column
//Stock Column
TableColumn<TableViewTest, String> StockColumn = new TableColumn<> ("Stock");
StockColumn.setMinWidth(150);
StockColumn.setCellValueFactory(new PropertyValueFactory<TableViewTest, String>("description"));
TableColumn<Object,ComboBox> PriceColumn;
PriceColumn = new TableColumn<>("Source");
PriceColumn.setMinWidth(150);
//PriceColumn.setCellValueFactory(new PropertyValueFactory<>
//(options));
//PriceColumn.setCellFactory(ComboBoxTableCell.forTableColumn(new
//DefaultStringConverter(), options));
//PriceColumn.setCellFactory(ComboBoxTableCell.forTableColumn(
//comboBox));
TableView<TableViewTest> table = new TableView<>();
table.setItems(products);
table.getColumns().addAll(nameColumn, StockColumn, PriceColumn);
TableColumn<..., String> priceColumn
(und ich denke, es sollte TableColumn<TableViewTest, String> priceColumn
). Dann sollten Sie in der Lage, einen ComboBoxTableCell
.Ich wünschte wirklich, es gab einige FXML Beispiele. Wer weiß?
InformationsquelleAutor noobCoder | 2016-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
James_D Antwort funktioniert gut, aber erfordert, dass der Benutzer auf das Element klicken, um zu sehen, die
ComboBox
. Wenn Sie wollen, umComboBox
es in eine Spalte, die immer angezeigt werden, müssen Sie verwenden eine benutzerdefiniertecellFactory
:Beispiel:
Die Arbeit mit edit events würde noch komplizierter werden. Die andere Möglichkeit wäre, den Zugriff auf die Zeile Wert und nicht der Wert der Zelle, die ich nicht mag, da IMHO die cellValueFactory entscheiden sollte auf den Teil des Elements angezeigt wird, und die cellFactory entscheiden sollten auf die visuelle Repräsentation des Werts.
Damit einverstanden, auf letzteres... aber Sie behandeln können Bearbeitungen mit nur ein paar Zuhörer, denke ich.
InformationsquelleAutor fabian
Den Arten für Ihre Tabelle-Spalte sind immer die Art von das Element in jeder Zeile (d.h. die gleiche wie die Art, die Sie für den table-view) für den ersten parameter vom Typ und der Art der (aktuelle) Wert für jede Zelle in der Spalte für den zweiten parameter. Also, wenn Sie Ihre Tabelle anzuzeigen geben Sie
TableViewTest
, und Ihre combo-box ist die AuswahlString
s haben, sollten SieWert der Zelle Fabrik soll noch anzeigen, um eine Immobilie in der
TableViewTest
Klasse, D. H. vorausgesetzt, Sie habendann können Sie
oder (viel besser)
Dann können Sie nur
Hier ein SSCCE:
setcellFactory
Methode aufrufen. Inkompatible Typen: Rückruf<TableColumn<Object,String>,TableCell<Object,String> kann nicht konvertiert werden, um Callback<TableColumn<TableViewTest,String>Java 7 wird nicht länger Staatlich unterstützt. Wir sind (ganz wesentlich) näher an den release-Termin von Java 9 als der release-Termin von Java 8 zu der Zeit des Schreibens. Es gibt wirklich keinen Grund, überhaupt noch eine ältere version, wenn Sie schreiben eine desktop-Anwendung. Für die Fehlermeldung: Sie sollten nicht
TableColumn<Object, String>
oderTableCell<Object, String>
überall in Ihrem code, wenn Sie mit einemTableView<TableViewTest>
.Ya Ihr Recht, heruntergeladene java 8 gibt es und es funktioniert perfekt. danke für die Hilfe
InformationsquelleAutor James_D