网站网址正能量,模板网推荐,wordpress插件的作用,国家住房建设部网站自定义ui理念 利用JavafX / FXML的声明性设计模式#xff0c;并允许用户仅通过使用例如SceneBuilder打开某个视图即可重新定制布局或添加新控件#xff0c;甚至根据用户需要更改样式#xff0c;从而无需任何编码即可自定义某个视图。 FXML文件 CSS基本上可以放置在通过URL可… 自定义ui 理念 利用JavafX / FXML的声明性设计模式并允许用户仅通过使用例如SceneBuilder打开某个视图即可重新定制布局或添加新控件甚至根据用户需要更改样式从而无需任何编码即可自定义某个视图。 FXML文件 CSS基本上可以放置在通过URL可以到达的任何地方。 用户必须只知道FXML内部分配的控制器类的接口/方法。 遥控器 假设此简单的演示控制器类提供了用于远程控制设备和发送MQTT消息的方法则用户可以自定义自己的遥控器。 public class RemoteController{FXMLpublic void onTest(){Alert alert new Alert(Alert.AlertType.INFORMATION);alert.setContentText();alert.setHeaderText(WORKS!);alert.show();}public void onTest(String value){Alert alert new Alert(Alert.AlertType.INFORMATION);alert.setHeaderText(WORKS!);alert.setContentText(value);alert.show();}public void onSwitch(String houseCode, int groudId, int deviceId, String command){Alert alert new Alert(Alert.AlertType.INFORMATION);alert.setHeaderText(Switch!);alert.setContentText(String.format(Command: send %s %d %d %s, houseCode, groudId, deviceId, command));alert.show();}
}remote.fxml和remote.css 请注意引用的de.jensd.shichimifx.demo.ext.RemoteController和remote.css 。 因此基本上可以通过以下方式调用控制器动作 onAction#onTest. 不错 如果添加 ?language javascript? 到FXML也可以通过controller -instance通过JavaScript调用传递参数。 onActioncontroller.onTest(OFF)
onActioncontroller.onSwitch(a,1,1,ON) 不幸的是除了- this之外 我找不到有关此功能的更多文档但是以某种方式它神奇地起作用了;-)。 甚至可以传递不同类型的参数。 ?xml version1.0 encodingUTF-8??language javascript?
?import javafx.geometry.*?
?import java.lang.*?
?import java.net.*?
?import java.util.*?
?import javafx.scene.*?
?import javafx.scene.control.*?
?import javafx.scene.layout.*?VBox alignmentTOP_CENTER prefHeight400.0 prefWidth600.0 spacing20.0 styleClassmain-pane stylesheetsremote.css xmlnshttp://javafx.com/javafx/8 xmlns:fxhttp://javafx.com/fxml/1 fx:controllerde.jensd.shichimifx.demo.ext.RemoteControllerchildrenLabel styleClasstitle-label textUniversal Remote /HBox alignmentCENTER_RIGHT spacing20.0childrenLabel layoutX228.0 layoutY96.0 styleClasssub-title-label textLight Frontdoor /Button layoutX43.0 layoutY86.0 mnemonicParsingfalse onAction#onTest prefWidth150.0 styleClassbutton-on textON /Button layoutX411.0 layoutY86.0 mnemonicParsingfalse onAction#onTest prefWidth150.0 styleClassbutton-off textOFF //childrenpaddingInsets left10.0 right10.0 //padding/HBoxHBox alignmentCENTER_RIGHT spacing20.0childrenLabel layoutX228.0 layoutY96.0 styleClasssub-title-label textLight Garden /Button layoutX43.0 layoutY86.0 mnemonicParsingfalse onActioncontroller.onTest(ON) prefWidth150.0 styleClassbutton-on textON /Button layoutX411.0 layoutY86.0 mnemonicParsingfalse onActioncontroller.onTest(OFF) prefWidth150.0 styleClassbutton-off textOFF //childrenpaddingInsets left10.0 right10.0 //padding/HBoxHBox alignmentCENTER_RIGHT spacing20.0childrenLabel layoutX228.0 layoutY96.0 styleClasssub-title-label textLight Garden /Button layoutX43.0 layoutY86.0 mnemonicParsingfalse onActioncontroller.onSwitch(a, 1,1,ON) prefWidth150.0 styleClassbutton-on textON /Button layoutX411.0 layoutY86.0 mnemonicParsingfalse onActioncontroller.onTest(OFF) prefWidth150.0 styleClassbutton-off textOFF //childrenpaddingInsets left10.0 right10.0 //padding/HBox/childrenpaddingInsets bottom20.0 left20.0 right20.0 top20.0 //padding
/VBox 基于此示例用户可以使用SceneBuilder轻松打开FXM1并添加新的Button来调用controller.onSwitch方法以控制为家庭自动化安装的不同/新设备。 FxmlUtils 的下一个版本ShichimiFX将包含新Utilily类负载FXML如图中ExternalFXMLDemoController 。 请注意 已加载的窗格通过onLoadExternalFxml()添加到演示应用程序的externalPane BorderPane的中心 public class ExternalFXMLDemoController {FXMLprivate ResourceBundle resources;FXMLprivate BorderPane externalPane;FXMLprivate TextField fxmlFileNameTextField;FXMLprivate Button chooseFxmlFileButton;FXMLprivate Button loadFxmlFileButton;private StringProperty fxmlFileName;public void initialize() {fxmlFileNameTextField.textProperty().bindBidirectional(fxmlFileNameProperty());loadFxmlFileButton.disableProperty().bind(fxmlFileNameProperty().isEmpty());}public StringProperty fxmlFileNameProperty() {if (fxmlFileName null) {fxmlFileName new SimpleStringProperty();}return fxmlFileName;}public String getFxmlFileName() {return fxmlFileNameProperty().getValue();}public void setFxmlFileName(String fxmlFileName) {this.fxmlFileNameProperty().setValue(fxmlFileName);}FXMLpublic void chooseFxmlFile() {FileChooser chooser new FileChooser();chooser.setTitle(Choose FXML file to load);if (getFxmlFileName().isEmpty()) {chooser.setInitialDirectory(new File(System.getProperty(user.home)));} else {chooser.setInitialDirectory(new File(getFxmlFileName()).getParentFile());}File file chooser.showOpenDialog(chooseFxmlFileButton.getScene().getWindow());if (file ! null) {setFxmlFileName(file.getAbsolutePath());}}FXMLpublic void onLoadExternalFxml() {try {OptionalURL url FxmlUtils.getFxmlUrl(Paths.get(getFxmlFileName()));if (url.isPresent()) {Pane pane FxmlUtils.loadFxmlPane(url.get(), resources);externalPane.setCenter(pane);} else {Alert alert new Alert(Alert.AlertType.WARNING);alert.setContentText(getFxmlFileName() could not be found!);alert.show();}} catch (IOException ex) {Dialogs.create().showException(ex);}}
}翻译自: https://www.javacodegeeks.com/2015/01/how-to-allow-users-to-customize-the-ui.html自定义ui