Java教程 第50页 JavaFX教程 – JavaFX超链接 超链接类表示类似于JavaFX的网页上的锚链接的超链接。 import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Hyperlink; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { stage.setTitle("HTML"); stage.setWidth(500); stage.setHeight(500); Scene scene = new Scene(new Group()); VBox root = new VBox(); Hyperlink link = new Hyperlink("www.w3cschool.cn"); root.getChildren().addAll(link); scene.setRoot(root); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } } 上面的代码生成以下结果。 创建超链接 以下代码使用默认构造函数创建超链接对象。然后它设置一个URL作为文本标题,最后添加点击事件处理程序。 Hyperlink link = new Hyperlink(); link.setText("http://www.w3cschool.cn"); link.setOnAction((ActionEvent e) -> { System.out.println("This link is clicked"); }); setText实例方法定义超链接的文本标题。 超链接类扩展了Labeled类,我们可以为超链接设置字体和填充。 以下代码将图像添加到超链接控件。 Hyperlink hpl = new Hyperlink("www.w3cschool.cn"); Image image1 = new Image(new File("a.jpg").toURI().toString(), 0, 100, false, false); hpl.setGraphic(new ImageView (image1)); 例子 更改超链接的字体 import java.io.File; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Hyperlink; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.VBox; import javafx.scene.text.Font;...
2024-04-01
JavaFX教程 – JavaFX密码字段 PasswordField用于密码输入。用户键入的字符通过显示回显字符串被隐藏。 创建密码字段 以下代码使用来自PasswordField类的默认构造函数创建一个密码字段,然后为密码字段设置提示消息文本。提示消息在字段中显示为灰色文本,并为用户提供该字段是什么的提示,而不使用标签控件。 PasswordField passwordField = new PasswordField(); passwordField.setPromptText("Your password"); PasswordField类有setText方法来为控件设置文本字符串。对于密码字段,指定的字符串由echo字符隐藏。默认情况下,echo字符是一个点。 密码字段中的值可以通过getText方法获取。 例子 密码字段和操作侦听器 /* * Copyright (c) 2011, 2012 Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * * This file is available and licensed under the following license: * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the...
2024-04-01
JavaFX教程 – JavaFX 文本字段 TextField用于单行文本输入。 import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { Scene scene = new Scene(new Group(), 450, 250); TextField notification = new TextField (); notification.setText("Label"); notification.clear(); GridPane grid = new GridPane(); grid.setVgap(4); grid.setHgap(10); grid.setPadding(new Insets(5, 5, 5, 5)); grid.add(new Label("To: "), 0, 0); grid.add(notification, 1, 0); Group root = (Group) scene.getRoot(); root.getChildren().add(grid); stage.setScene(scene); stage.show(); } } TextField和PasswordField扩展了TextInput类,它是JavaFX中所有文本控件的超类。 上面的代码生成以下结果。 创建文本字段 我们可以使用TextField类的构造函数来创建文本字段。 TextField只是一个带有光标的文本输入框,通常我们需要一个Label控件来告诉文本字段的目的。以下代码创建一个Label控件以标记对应的文本字段是用于名称输入。然后它创建一个TextField对象。之后,它使用HBox布局Label和TextField。 Label label1 = new Label("Name:"); TextField textField = new TextField (); HBox hb = new HBox(); hb.getChildren().addAll(label1, textField); hb.setSpacing(10); 使用预定义文本创建文本域 TextField textField = new TextField("w3cschool.cn") TextField中的文本 要从文本字段获取值,请调用getText方法。 从TextInput的setPrefColumnCount方法设置文本字段的大小。通过设置一次可以显示的最大字符数。...
2024-04-01
JavaFX教程 – JavaFX 选择框 JavaFX框允许用户在几个选项之间快速选择。 创建一个选择框 我们可以使用ChoiceBox中的consturctors来创建ChoiceBox对象。 以下代码显示了如何使用其构造函数创建和填充选择框。列表项是从可观察列表创建的。 ChoiceBox cb = new ChoiceBox(FXCollections.observableArrayList("A", "B", "C")); 我们也可以使用一个空的选择框使用它的默认构造函数,并使用setItems方法设置列表项。 ChoiceBox cb = new ChoiceBox(); cb.setItems(FXCollections.observableArrayList( "A", "B", new Separator(), "C", "D") ); 上面的代码还将一个分隔符对象添加到选择框。分隔符控件分隔项目。 例子 import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.ChoiceBox; import javafx.scene.control.Label; import javafx.scene.control.Tooltip; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; public class Main extends Application { Rectangle rect = new Rectangle(150, 30); final Label label = new Label("Hello"); public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { Scene scene = new Scene(new Group()); scene.setFill(Color.ALICEBLUE); stage.setScene(scene); stage.show(); stage.setWidth(300); stage.setHeight(200); label.setStyle("-fx-font: 25 arial;"); label.setLayoutX(40); rect.setStroke(Color.BLUE); rect.setStrokeWidth(3); rect.setFill(Color.WHITE); final String[] greetings = new String[] { "A", "B",...
2024-04-01
JavaFX教程 – JavaFX 切换按钮 切换按钮具有两种状态:选择或未选择。 我们通常将两个或多个切换按钮组合成一个组,并允许用户只选择一个按钮或不选择。 创建切换按钮 我们可以使用ToggleButton类的三个构造函数创建一个切换按钮。 要创建没有任何字幕或图标的切换按钮 ToggleButton tb = new ToggleButton(); 要创建带有文字说明的切换按钮 ToggleButton tb = new ToggleButton("Press me"); 要创建带有文字说明和图标的切换按钮 Image image = new Image(getClass().getResourceAsStream("icon.png")); ToggleButton tb = new ToggleButton ("Press me", new ImageView(image)); setText方法可以将文本设置为ToggleButton和setGraphic方法可以将图像安装到ToggleButton。 切换按钮组 切换组不强制选择至少一个按钮。单击所选的切换按钮可取消选择切换按钮。 ToggleGroup group = new ToggleGroup(); ToggleButton tb1 = new ToggleButton("High"); tb1.setToggleGroup(group); tb1.setSelected(true); ToggleButton tb2 = new ToggleButton("Medium"); tb2.setToggleGroup(group); ToggleButton tb3 = new ToggleButton("Low"); tb3.setToggleGroup(group); 切换按钮行为 setUserData方法将用户值与切换按钮相关联。 ChangeListener对象检查组中所选的切换。如果没有选择任何开关按钮,则输出默认值。 如果选择其中一个切换按钮,getSelectedToggle和getUserData方法返回用户定义的值。 tb1.setUserData("High"); tb2.setUserData("Medium"); tb3.setUserData("Low"); ToggleGroup group = new ToggleGroup(); group.selectedToggleProperty().addListener (ObservableValue<? extends Toggle> ov, Toggle toggle, Toggle new_toggle) -> { if (new_toggle == null) System.out.println("default value"); else System.out.println(group.getSelectedToggle().getUserData()); }); 样式切换按钮 我们可以将CSS样式应用于切换按钮。 首先,我们在myStyle.css文件中声明切换按钮的样式。 .toggle-button1{ -fx-font: 30 arial; -fx-base: green; } .toggle-button2{ -fx-font: 25 arial; -fx-base: blue; } .toggle-button3{ -fx-font: 30 arial; -fx-base: red; } 其次,我们在应用程序中安装样式。...
2024-04-01
JavaFX教程 – JavaFX 单选按钮 单选按钮通常组合在一起以允许用户进行单选,即用户只能在单选按钮列表中选择一个项目。例如,当选择鞋子尺寸时,我们通常从列表中选择一个尺寸。 选择或取消选择单选按钮。 以下代码显示,当放置在ToggleGroup中时,只能选择一个RadioButton。 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.HBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { HBox root = new HBox(); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle(""); ToggleGroup group = new ToggleGroup(); RadioButton button1 = new RadioButton("select first"); button1.setToggleGroup(group); button1.setSelected(true); RadioButton button2 = new RadioButton("select second"); button2.setToggleGroup(group); root.getChildren().add(button1); root.getChildren().add(button2); scene.setRoot(root); stage.show(); } public static void main(String[] args) { launch(args); } } 上面的代码生成以下结果。 创建单选按钮 javafx.scene.control包中的RadioButton类有两个构造函数。 要为其标签创建一个带有空字符串的单选按钮,然后再设置标签。 RadioButton rb = new RadioButton(); //setting a text label rb.setText("Size 9"); 要创建具有指定标签的单选按钮 RadioButton rb2 = new RadioButton("Size 9"); 带有true参数的setSelected()方法可以显式选择单选按钮。 isSelected 方法返回用户是否选择了特定单选按钮。 setGraphic 方法可以为RadioButton安装一个图像。 Image image = new Image(getClass().getResourceAsStream("Size.jpg")); RadioButton rb = new RadioButton("Size 9"); rb.setGraphic(new ImageView(image)); 单选按钮组...
2024-04-01
JavaFX教程 – JavaFX按钮 当用户单击按钮时,JavaFX Button类可以触发事件。 Button类扩展标记的类,它可以显示文本,图像,或两者兼而有之。 以下代码显示了如何向Button添加单击操作侦听器。 import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello World!"); Button btn = new Button(); btn.setText("Say "Hello World""); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); } } 上面的代码生成以下结果。 创建按钮 我们使用以下构造函数在JavaFX中创建一个Button。 创建带有空文本标题的按钮。 Button button = new Button(); 创建具有指定文本的按钮。 Button button = new Button("OK"); 要创建带有文本和图标的按钮。 Image imageOk = new Image(getClass().getResourceAsStream("OK.png")); Button button = new Button("OK", new ImageView(imageOk)); 按钮内容 创建JavaFX Button对象后,我们可以使用以下方法设置文本并安装图标。 setText(String text) – 设置按钮的文本标题 setGraphic(Node graphic) – 设置图标 除了ImageView对象,我们可以使用javafx.scene.shape包中的形状作为Button中的图形元素。 setGraphicTextGap方法设置文本和图形内容之间的差距。 以下代码将图像安装到按钮。 Image...
2024-04-01
JavaFX教程 – JavaFX标签 JavaFX API的javafx.scene.control包中的Label类显示一个文本元素。 我们可以包装文本元素以适应特定空间,添加图形图像或使用JavaFX Label控件应用视觉效果。 以下代码显示如何使用Label显示文本。 import javafx.application.Application; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { Group root = new Group(); Scene scene = new Scene(root, 300, 130, Color.WHITE); GridPane gridpane = new GridPane(); gridpane.setPadding(new Insets(5)); gridpane.setHgap(10); gridpane.setVgap(10); Label label = new Label("Label"); GridPane.setHalignment(label, HPos.CENTER); gridpane.add(label, 0, 0); root.getChildren().add(gridpane); primaryStage.setScene(scene); primaryStage.show(); } } 创建标签 JavaFX API提供了用于创建标签的Label类的三个构造函数。 //An empty label Label label1 = new Label(); //A label with the text element Label label2 = new Label("Name"); //A label with the text element and graphical icon Image image = new Image(getClass().getResourceAsStream("labels.jpg")); Label...
2024-04-01
JavaFX教程 – JavaFX集合 JavaFX中的集合由javafx.collections包定义,javafx.collections包由以下接口和类组成: 接口 接口 描述 ObservableList 允许我们跟踪更改的列表 ListChangeListener 接收更改通知的接口 ObservableMap 允许我们跟踪更改的映射 MapChangeListener 从ObservableMap接收更改通知的接口 类 类 描述 FXCollections 实用程序类映射到java.util.Collections ListChangeListener.Change 表示对ObservableList所做的更改 MapChangeListener.Change 表示对ObservableMap所做的更改 例子 以下代码显示如何使用ObservableList,ObservableMap和FXCollections。 import java.util.ArrayList; import java.util.List; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<String>(); ObservableList<String> observableList = FXCollections.observableList(list); observableList.addListener(new ListChangeListener() { @Override public void onChanged(ListChangeListener.Change change) { System.out.println("change!"); } }); observableList.add("item one"); list.add("item two"); System.out.println("Size: " + observableList.size()); } } 上面的代码生成以下结果。 例2 以下代码显示了如何监听ObservableMap上的更改。 import java.util.HashMap; import java.util.Map; import javafx.collections.FXCollections; import javafx.collections.MapChangeListener; import javafx.collections.ObservableMap; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); ObservableMap<String, String> observableMap = FXCollections .observableMap(map); observableMap.addListener(new MapChangeListener() { @Override public void onChanged(MapChangeListener.Change...
2024-04-01
JavaFX教程 – JavaFX绑定 JavaFX绑定同步两个值:当因变量更改时,其他变量更改。 要将属性绑定到另一个属性,请调用bind()方法,该方法在一个方向绑定值。例如,当属性A绑定到属性B时,属性B的更改将更新属性A,但不是相反。 绑定选项 JavaFX提供了许多绑定选项,以便在域对象和GUI控件中的属性之间进行同步。 我们可以在JavaFX的属性API中使用以下三种绑定策略: Java Bean上的双向绑定 与Fluent API的高级绑定 使用javafx.beans.binding.*中定义的绑定对象进行低级绑定。 双向绑定 双向绑定绑定相同类型的属性,并同步两侧的a值。 当与bindBidirectional()方法双向绑定时,需要两个属性都必须是可读/可写的。 以下代码显示如何在firstName属性和字符串属性变量之间进行双向绑定 import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; public class Main { public static void main(String[] args) { User contact = new User("Jame", "Bind"); StringProperty fname = new SimpleStringProperty(); fname.bindBidirectional(contact.firstNameProperty()); contact.firstNameProperty().set("new value"); fname.set("New First Name"); System.out.println("firstNameProperty = " + contact.firstNameProperty().get()); System.out.println("fname = " + fname.get()); } } class User { private SimpleStringProperty firstName = new SimpleStringProperty(); private SimpleStringProperty lastName = new SimpleStringProperty(); public User(String fn, String ln) { firstName.setValue(fn); lastName.setValue(ln); } public final String getFirstName() { return firstName.getValue(); } public StringProperty firstNameProperty() { return firstName; } public final void setFirstName(String firstName) { this.firstName.setValue(firstName); } public final String getLastName() { return lastName.getValue(); } public StringProperty lastNameProperty() { return...
2024-04-01