Last active
February 10, 2023 14:02
-
-
Save jewelsea/3062859 to your computer and use it in GitHub Desktop.
JavaFX fxml combo box selection demonstration app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** fruitcombo.css | |
place in same directory as FruitComboApplication.java | |
ensure build system copies the css file to the build output path */ | |
.layout { | |
-fx-background-color: cornsilk; | |
} | |
#selected-fruit-frame { | |
-fx-border-color: burlywood; | |
-fx-border-width: 5; | |
-fx-background-color: white; | |
} | |
.bold-label { | |
-fx-font-weight: bold; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!-- fruitcombo.fxml | |
place in same directory as FruitComboApplication.java | |
ensure build system copies the fxml file to the build output path --> | |
<?import java.lang.*?> | |
<?import java.net.*?> | |
<?import java.util.*?> | |
<?import javafx.collections.*?> | |
<?import javafx.scene.control.*?> | |
<?import javafx.scene.image.*?> | |
<?import javafx.scene.layout.*?> | |
<?import javafx.scene.paint.*?> | |
<?scenebuilder-stylesheet fruitcombo.css?> | |
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="205.0" prefWidth="168.0" styleClass="layout" xmlns:fx="http://javafx.com/fxml" fx:controller="fruit.FruitComboController"> | |
<children> | |
<ComboBox fx:id="fruitCombo" layoutX="15.0" layoutY="33.0" prefWidth="90.0" promptText="choose"> | |
<items> | |
<FXCollections fx:factory="observableArrayList"> | |
<String fx:value="Apple" /> | |
<String fx:value="Orange" /> | |
<String fx:value="Pear" /> | |
</FXCollections> | |
</items> | |
</ComboBox> | |
<Label id="fruitSelectorLabel" layoutX="15.0" layoutY="10.0" styleClass="bold-label" text="Fruit Selector" /> | |
<VBox alignment="TOP_CENTER" layoutX="14.0" layoutY="62.0" prefHeight="134.0" prefWidth="140.0" spacing="8.0"> | |
<children> | |
<StackPane id="selected-fruit-frame" minHeight="100.0" minWidth="118.0" prefHeight="108.0" prefWidth="140.0"> | |
<children> | |
<ImageView fx:id="orangeImage" fitHeight="91.99999237060547" fitWidth="122.66666035739114" pickOnBounds="true" preserveRatio="true" visible="false"> | |
<image> | |
<Image url="http://pngimg.com/upload/orange_PNG803.png" preserveRatio="false" smooth="false" /> | |
</image> | |
</ImageView> | |
<ImageView fx:id="pearImage" fitHeight="93.0" fitWidth="124.0" pickOnBounds="true" preserveRatio="true" visible="false"> | |
<image> | |
<Image url="http://thedeliciousrevolution.com/wp-content/uploads/2008/08/Pears.png" preserveRatio="false" smooth="false" /> | |
</image> | |
</ImageView> | |
<ImageView fx:id="appleImage" fitHeight="93.0" fitWidth="124.0" pickOnBounds="true" preserveRatio="true" visible="false"> | |
<image> | |
<Image url="http://uhallnyu.files.wordpress.com/2011/11/green-apple.jpg" preserveRatio="false" smooth="false" /> | |
</image> | |
</ImageView> | |
</children> | |
</StackPane> | |
<Label fx:id="selectedFruit" textAlignment="CENTER" /> | |
</children> | |
</VBox> | |
</children> | |
<stylesheets> | |
<URL value="@fruitcombo.css" /> | |
</stylesheets> | |
</AnchorPane> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package fruit; | |
import java.io.IOException; | |
import java.net.URL; | |
import javafx.application.Application; | |
import javafx.fxml.FXMLLoader; | |
import javafx.scene.Scene; | |
import javafx.scene.image.Image; | |
import javafx.scene.layout.AnchorPane; | |
import javafx.stage.Stage; | |
/** Main application class for fruit combo fxml demo application */ | |
public class FruitComboApplication extends Application { | |
public static void main(String[] args) { launch(args); } | |
@Override public void start(Stage stage) throws IOException { | |
stage.setTitle("Choices"); | |
stage.getIcons().add(new Image("http://files.softicons.com/download/application-icons/pixelophilia-icons-by-omercetin/png/32/apple-green.png")); | |
AnchorPane layout = FXMLLoader.load( | |
new URL(FruitComboApplication.class.getResource("fruitcombo.fxml").toExternalForm()) | |
); | |
stage.setScene(new Scene(layout)); | |
stage.show(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package fruit; | |
import java.net.URL; | |
import java.util.ResourceBundle; | |
import javafx.beans.value.ChangeListener; | |
import javafx.beans.value.ObservableValue; | |
import javafx.fxml.FXML; | |
import javafx.fxml.Initializable; | |
import javafx.scene.control.ComboBox; | |
import javafx.scene.control.Label; | |
import javafx.scene.image.ImageView; | |
/** JavaFX fxml controller for fruit combo fxml demo application. */ | |
public class FruitComboController implements Initializable { | |
@FXML // fx:id="appleImage" | |
private ImageView appleImage; // Value injected by FXMLLoader | |
@FXML // fx:id="fruitCombo" | |
private ComboBox<String> fruitCombo; // Value injected by FXMLLoader | |
@FXML // fx:id="orangeImage" | |
private ImageView orangeImage; // Value injected by FXMLLoader | |
@FXML // fx:id="pearImage" | |
private ImageView pearImage; // Value injected by FXMLLoader | |
@FXML // fx:id="selectedFruit" | |
private Label selectedFruit; // Value injected by FXMLLoader | |
@Override // This method is called by the FXMLLoader when initialization is complete | |
public void initialize(URL fxmlFileLocation, ResourceBundle resources) { | |
assert appleImage != null : "fx:id=\"appleImage\" was not injected: check your FXML file 'fruitcombo.fxml'."; | |
assert fruitCombo != null : "fx:id=\"fruitCombo\" was not injected: check your FXML file 'fruitcombo.fxml'."; | |
assert orangeImage != null : "fx:id=\"orangeImage\" was not injected: check your FXML file 'fruitcombo.fxml'."; | |
assert pearImage != null : "fx:id=\"pearImage\" was not injected: check your FXML file 'fruitcombo.fxml'."; | |
assert selectedFruit != null : "fx:id=\"selectedFruit\" was not injected: check your FXML file 'fruitcombo.fxml'."; | |
// bind the selected fruit label to the selected fruit in the combo box. | |
selectedFruit.textProperty().bind(fruitCombo.getSelectionModel().selectedItemProperty()); | |
// listen for changes to the fruit combo box selection and update the displayed fruit image accordingly. | |
fruitCombo.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() { | |
@Override public void changed(ObservableValue<? extends String> selected, String oldFruit, String newFruit) { | |
if (oldFruit != null) { | |
switch(oldFruit) { | |
case "Apple": appleImage.setVisible(false); break; | |
case "Orange": orangeImage.setVisible(false); break; | |
case "Pear": pearImage.setVisible(false); break; | |
} | |
} | |
if (newFruit != null) { | |
switch(newFruit) { | |
case "Apple": appleImage.setVisible(true); break; | |
case "Orange": orangeImage.setVisible(true); break; | |
case "Pear": pearImage.setVisible(true); break; | |
} | |
} | |
} | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thank you for the code