在javafx 2.0中,可以使用FXML方法或使用普通的Java代码来创建布局.关于精心设计的UI集的最佳方法是什么.在我的应用程序中,大约有100个子UI.
谢谢
当最初从FXML加载场景时,如何在java代码中向Scene添加新节点?我已从FXML加载,如下所示
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
Scene scene = new Scene(root, 1000, 600, Color.DODGERBLUE);
Run Code Online (Sandbox Code Playgroud)
现在说例如如何在Java代码中向场景添加按钮?
似乎有点问这个,我认为使用FXML来编写我们的自定义组件显然是正确的方法.
但正如我们从ControlsFX,JFXextras甚至"掌握JavaFX8控件"这本书中看到的那样,不要在自定义控件中使用或提及FXML的使用.
尽管如此,官方文档说要继续这条路线,并通过FXML创建JavaFX控件.
什么是更正确的方式和原因?
我的目标是通过拖放对tableview进行排序.我按照这个例子:http://docs.oracle.com/javafx/2/fxml_get_started/fxml_tutorial_intermediate.htm
对于拖放我通过Scene Builder添加了fxml
<TableView fx:id="tableView" onDragDetected="#dragDetected" onDragDropped="#dragDropped" onDragOver="#dragOver"
Run Code Online (Sandbox Code Playgroud)
并制作了控制器
@FXML
private void dragDetected(MouseEvent event) {
System.out.println("dragDetected");
Integer idx;
idx = tableView.getSelectionModel().getFocusedIndex();
Dragboard db = tableView.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.putString(idx.toString());
db.setContent(content);
System.out.println(idx);
// System.out.println(event.getPickResult());
event.consume();
}
@FXML
private void dragOver(DragEvent event) {
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
event.consume();
}
@FXML
private void dragDropped(DragEvent event) {
System.out.println("dragDropped");
System.out.println(event.getTarget());
System.out.println(event.getPickResult());
}
Run Code Online (Sandbox Code Playgroud)
但是当拖拽掉落时,我无法得到放下物体的地方的行.我得到的只是细胞信息.Text[text="Smith", x=0.0, y=0.0, ...
我该如何开展这项工作?也许Class TableRow<T>可以帮忙,但我不明白如何使用它.
如何AnchorPane使用Scene Builder 将背景图像添加到a ?
我试过它:
-fx-background-image url('C:/Users/Documents/page_background.gif')
Run Code Online (Sandbox Code Playgroud)
我如何在Scene Builder中设置它.
并生成的FXML:
<AnchorPane id="LoginAnchorPane" fx:id="LoginAnchorPane" prefHeight="400.0" prefWidth="600.0" style="-fx-background-image: url('C:/Users/Documents/page_background.gif');" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafx_lsdu.LoginController">
Run Code Online (Sandbox Code Playgroud)
我的FXMl上有一个JavaFX TextField控件,看起来像这样......
<TextField fx:id="input_search" onKeyPressed="#keyListener" prefHeight="25.0" prefWidth="197.0" />
Run Code Online (Sandbox Code Playgroud)
我想在用户输入时自动将所有字符更改为大写.
我控制器中的代码:
public void keyListener(KeyEvent event){
//maybe transform the pressed key to uppercase here...
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用构建下一个/上一个窗口TabPane.我决定使用,TabPane因为它很容易在SceneBuilder中使用和设计.在开始FO的应用程序,我用这个隐藏的TabBar的现在-
tabPane.setTabMinHeight(-10);
tabPane.setTabMaxHeight(-10);
Run Code Online (Sandbox Code Playgroud)
TabPane在此之后的外观 -
如您所见,TabBar仍然只有一小部分(在标题栏下方).我怎样才能完全隐藏它,这样我的TabPane看起来就像一个普通的Pane但是它的所有功能都完好无损?
JavaFx/FXML上下文中的"Node"一词是什么意思?如果我搜索这个问题,我发现所有人都在使用"讨论别的东西"一词,但没有解释.例如,这个问题的答案: 如何从控制器类打开JavaFX FileChooser?:
对于场景中的任何节点(例如,根节点;但是使用@FXML注入的任何节点都可以),
chooser.showOpenDialog(node.getScene().getWindow());
节点会是什么,以及如何"注入@FXML"?
在JavaFX中,Control的子类有一个tooltip属性,这意味着可以使用FXML以声明方式添加Tooltip:
<CheckBox fx:id="someCheckBox" mnemonicParsing="false" text="Do It?">
<tooltip>
<Tooltip text="Whether or not to do it."/>
</tooltip>
</CheckBox>
Run Code Online (Sandbox Code Playgroud)
这是可能的,因为CheckBox是Control的子类.
但是,我希望能够使用FXML向任何场景图节点添加工具提示(即无需使用Java以编程方式添加工具提示).