ComboBox remplit mais pas d'affichage
Résolu
moi411
Messages postés
179
Date d'inscription
Statut
Membre
Dernière intervention
-
moi411 Messages postés 179 Date d'inscription Statut Membre Dernière intervention -
moi411 Messages postés 179 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
Alors voilà, comme dit dans le titre je remplie mon combobBox, par contre,il n'affiche rien...
Les items sont présent dans le combobox mais ce dernier refuse de les "montrer" à l'écran! Une option oubliée peut-être? C'est ce que j'aimerai savoir!
Remplissage:
ObservableList<String> options = FXCollections.observableArrayList
("Option 1", "Option 2", "Option 3");
ComboBox<String> monComboBox = new ComboBox<String>(options);
Affichage:
for(String s: detailsComboBox.getItems())
{
Alert ... //Les items sont affichés dans l'ordre où ils sont rentré via "options"
}
Mais lors du click pour ouvrir le comboBox, ce dernier n'affiche rien!
Merci d'avance et bonne nuit!
--
Alors voilà, comme dit dans le titre je remplie mon combobBox, par contre,il n'affiche rien...
Les items sont présent dans le combobox mais ce dernier refuse de les "montrer" à l'écran! Une option oubliée peut-être? C'est ce que j'aimerai savoir!
Remplissage:
ObservableList<String> options = FXCollections.observableArrayList
("Option 1", "Option 2", "Option 3");
ComboBox<String> monComboBox = new ComboBox<String>(options);
Affichage:
for(String s: detailsComboBox.getItems())
{
Alert ... //Les items sont affichés dans l'ordre où ils sont rentré via "options"
}
Mais lors du click pour ouvrir le comboBox, ce dernier n'affiche rien!
Merci d'avance et bonne nuit!
--
A voir également:
- ComboBox remplit mais pas d'affichage
- Affichage double ecran - Guide
- Windows 11 affichage classique - Guide
- Problème affichage fenêtre windows 10 - Guide
- Affichage youtube trop grand ✓ - Forum YouTube
- Casio fx-92 affichage décimal ✓ - Forum calculatrices
2 réponses
Bonjour,
J'ai trouvé quelque chose qui fonctionne à moitié!
FXML:
...
...
...
</ComboBox>
Niveau affichage c'est ce que je cherche mais quand je clique sur un des labels le texte et l'image s'effacent et impossible de les réafficher (sauf en fermant le programme)...
EVENEMENT:
Merci d'avance et à bientôt!
J'ai trouvé quelque chose qui fonctionne à moitié!
FXML:
<ComboBox fx:id="detailsComboBox" layoutX="207.0" layoutY="142.0" prefHeight="25.0" prefWidth="174.0"> <items> <FXCollections fx:factory="observableArrayList"> <Label onMousePressed="#detailsClick" textFill="BLACK" text="Quitter"> <graphic> <StackPane prefWidth="50"> <children> <ImageView fitHeight="32" preserveRatio="true"> <image> <Image preserveRatio="false" smooth="false" url="/application/quitter.png" /> </image> </ImageView> </children> </StackPane> </graphic> </Label>
...
...
...
</ComboBox>
Niveau affichage c'est ce que je cherche mais quand je clique sur un des labels le texte et l'image s'effacent et impossible de les réafficher (sauf en fermant le programme)...
EVENEMENT:
@FXML protected void detailsClick(MouseEvent event) { Label l = (Label)event.getSource(); detailsTextField.setText(l.getText()); }
Merci d'avance et à bientôt!
Et bien en fait j'ai trouvé...
Au risque de faire une redondance je remets le code ci-dessous (déjà employé dans une autre question!!!)
Bref, le code:
Au risque de faire une redondance je remets le code ci-dessous (déjà employé dans une autre question!!!)
Bref, le code:
package combotest; import javafx.application.Application; import javafx.beans.InvalidationListener; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.control.SplitPane; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class Main extends Application { private static final class ComBoxItemPerso { private final String value; private final Image icon; public ComBoxItemPerso(final String value, final String iconUrl) { this.value = value; this.icon = new Image(iconUrl); } public String getValue() { return value; } public Image getIcon() { return icon; } } private static final class ComBoxItemPersoListCell extends ListCell<ComBoxItemPerso> { private final ComboBox<ComBoxItemPerso> parent; private final Label rightLabel = new Label(); private final ImageView leftImage = new ImageView(); private final SplitPane splitPane = new SplitPane(leftImage, rightLabel); public ComBoxItemPersoListCell(final ComboBox<ComBoxItemPerso> parent) { super(); // Oblige de rajouter tout ce qui suit a cause du splitpane. this.parent = parent; leftImage.setOnMousePressed(this::selectInCombo); // rightLabel.setStyle("-fx-border-color: green;"); rightLabel.setMaxWidth(Double.MAX_VALUE); rightLabel.setOnMousePressed(this::selectInCombo); } private ComBoxItemPerso lastItem; @Override protected void updateItem(final ComBoxItemPerso item, final boolean empty) { super.updateItem(item, empty); lastItem = item; Node graphic = null; leftImage.setImage(null); rightLabel.setText(null); if (!empty && item != null) { leftImage.setImage(item.getIcon()); rightLabel.setText(item.getValue()); graphic = splitPane; } setGraphic(graphic); setText(null); } private void selectInCombo(final MouseEvent mouseEvent) { if (parent != null) { parent.getSelectionModel().select(lastItem); } } } private final TextField detailsTextField = new TextField(); private final ComboBox<ComBoxItemPerso> myComboBox = new ComboBox<>(); @Override public void start(Stage primaryStage) { detailsTextField.setEditable(false); //comboBox myComboBox.setPrefWidth(176.5); final ObservableList<ComBoxItemPerso> options = FXCollections.observableArrayList(new ComBoxItemPerso("1", getClass().getResource("1.png").toExternalForm()), new ComBoxItemPerso("2", getClass().getResource("2.png").toExternalForm()), new ComBoxItemPerso("3", getClass().getResource("3.png").toExternalForm())); myComboBox.setItems(options); myComboBox.setButtonCell(new ComBoxItemPersoListCell(null)); myComboBox.setCellFactory(listView -> new ComBoxItemPersoListCell(myComboBox)); myComboBox.valueProperty().addListener(valueInvalidationListener); final StackPane center = new StackPane(); center.getChildren().add(myComboBox); final BorderPane root = new BorderPane(center, detailsTextField, null, null, null); final Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Test"); primaryStage.setScene(scene); primaryStage.show(); } private final InvalidationListener valueInvalidationListener = observable -> { final ComBoxItemPerso item = myComboBox.getValue(); final String text = (item == null) ? null : item.getValue(); detailsTextField.setText(text); }; public static void main(String[] args) { launch(args); } }