Ciao community di StackExchange! Questo è il mio primo post e apprezzo qualsiasi aiuto che chiunque può offrire. Sono nuovo di Java, e sono sicuro che questo problema è semplicemente dovuto al mio fraintendimento dei fondamenti.
Ho una finestra JavaFX (Java 8) con una TreeView riempita con TreeItems contenente un oggetto Product
. Questo oggetto ha molti campi, uno dei quali è model
di tipo String. Quando aggiungo un TreeItem, desidero che esso non solo memorizzi l'oggetto Product ma visualizzi anche il campo String model nell'elenco TreeView; tuttavia, ottengo questo: com.[company name].Products.Product@[number]
. Questo è il percorso del pacchetto per la classe Product
. [number]
è una stringa casuale di ciò che sembra essere 8 caratteri esadecimali che è univoco per ogni istanza.
Gli TreeItem vengono aggiunti tramite un metodo di classe e sospetto che sia il mio problema. Ecco un elenco del flusso corretto:
- Fai clic sul pulsante "Aggiungi prodotto".
- Apri la finestra a comparsa.
- Seleziona il modello appropriato.
- Fai clic su OK.
-
Product
oggetto viene aggiunto al TreeView tramite il metodomakeTreeItem
(vedi sotto). - Nuovo TreeItem dovrebbe mostrare il modello che è una stringa.
Esempio di lavoro minimo:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class TreeItemTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override public void start(Stage primaryStage) {
TreeItem<Product> rootTree = new TreeItem<>(new Product("root"));
TreeView<Product> treeView = new TreeView<>(rootTree);
treeView.setShowRoot(false);
BorderPane rootPane = new BorderPane();
rootPane.setCenter(treeView);
makeTreeItem("New Item 1", rootTree);
makeTreeItem("New Item 2", rootTree);
Scene scene = new Scene(rootPane);
primaryStage.setScene(scene);
primaryStage.setTitle("Tree Item Test");
primaryStage.show();
}
private TreeItem<Product> makeTreeItem(String title, TreeItem<Product> parent) {
TreeItem<Product> newItem = new TreeItem<>(new Product(title));
newItem.setExpanded(true);
parent.getChildren().add(newItem);
return newItem;
}
}
Entrambi i "nuovi elementi" si mostrano semplicemente come Product@########
(ricorda che i simboli di hash sono caratteri esadecimali). La classe del prodotto:
public class Product {
String model;
public Product(String model) {
this.model = model;
}
}
Ho il sospetto che quello che sto cercando sia un CellFactory di qualche tipo, simile al CellFactory di TableView. Per quanto possa sembrare difficile, non riesco a trovare nulla di molto promettente per la vita di me. Aiuto! Cosa mi manca?!