在这段代码中:
public class ESM extends Application {
private Stage primaryStage;
@FXML
private ToolBar mainToolBar;
@Override
public void start(final Stage stage) throws Exception {
try{
this.primaryStage = stage;
Parent root = FXMLLoader.load(getClass().getResource("/nz/co/great_ape/esm3/main_window.fxml"));
Scene scene = new Scene(root, 800, 700);
// Setup main stage to be full screen, no min or max buttons.
// TODO: How will this handle multiple screens? Apparently not well :-(
Screen screen = Screen.getPrimary();
Rectangle2D bounds = screen.getVisualBounds();
primaryStage.setX(bounds.getMinX());
primaryStage.setY(bounds.getMinY());
primaryStage.setWidth(bounds.getWidth());
primaryStage.setHeight(bounds.getHeight());
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.setTitle("ESM three");
primaryStage.setScene(scene);
primaryStage.show(); …Run Code Online (Sandbox Code Playgroud) 所以我当然直接创建一个简单的例子.
public class Main extends Application {
URL bla = getClass().getResource("/sample.fxml");
@Override
public void start(Stage primaryStage) throws Exception{
//If you get weird errors: http://zenjava.com/javafx/maven/fix-classpath.html
//but not actually my issue. Example displays fine in intellij.
try {
FXMLLoader loader = new FXMLLoader(bla);
Parent root = loader.load(bla);
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root));
primaryStage.show();
Controller controller = loader.<Controller>getController() ;
assert(controller != null);
controller.getLabel().setText("Kaboom!");
} catch (Exception e) {
// Exception gets thrown if the fxml file could not be loaded
e.printStackTrace();
}
}
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CSS在我的JavaFX(FXML)应用程序中获取动态滚动窗格。我的CSS窗格看起来像这样:
.scroll-pane {
-fx-width: 80%;
-fx-height: 80%;
-fx-background-color: #FF3333;
}
Run Code Online (Sandbox Code Playgroud)
颜色有效,但是如果我在JavaFX Scene Builder中打开CSS,则size属性不起作用,它根本不显示高度和宽度线。
我认为我缺少一些基本知识,但我似乎无法弄清楚。
这个问题已在这里提出,但未能找到任何答案.我已经复制了类似的情况,我想使用控制器从另一个类更改标签的文本
FXMLDocumentController.java
public class FXMLDocumentController implements Initializable {
@FXML
private Label label;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("FXMLDocumentController.#handleButtonAction");
label.setText("Hello World!");
Connector.Connecting();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
public void setLabelText(String text)
{
System.out.println("FXMLDocumentController.setLabelText(): Called");
label.setText(text);
}
}
Run Code Online (Sandbox Code Playgroud)
FXMLDocument.fxml
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="demo5.FXMLDocumentController">
<children>
<Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
<Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" />
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
Demo5.java
public class Demo5 extends Application { …Run Code Online (Sandbox Code Playgroud) 我有一个FXML文件,我用它来允许用户输入请求.现在我只是把它放在一个新的阶段并且做到了Stage.show().我不希望它出现在一个新窗口中,表现得更像一个ContextMenu.
看看ContextMenu课程,似乎我不能根据FXML文件设置内容.有没有办法用ContextMenu或者Popup或其他一些我不知道的类来做到这一点?
我通过单击按钮从fxml文件动态添加选项卡。有没有一种方法可以查看JavaFX的TabPane中是否已打开该选项卡,然后切换到该选项卡,而不是将相同的选项卡添加到TabPane。
这是我的控制器类:
package application;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.AnchorPane;
public class MainController implements Initializable{
@FXML
public TabPane myTabPane ;
public AnchorPane myAnchorPane;
@FXML
public Button btnTab1 = new Button();
@FXML
public Button btnTab2 = new Button();
@FXML
public Button btnTab3 = new Button();
@Override
public void initialize(URL location, ResourceBundle resources) {
btnTab1.setOnAction(e -> {
//System.out.println("Clicked");
try {
Tab myNewTab = FXMLLoader.load(this.getClass().getResource("MyTestTab.fxml")); …Run Code Online (Sandbox Code Playgroud) 我有一个主文件有切换按钮,单击其中一个按钮我启动一个新的FXMLLoader,有大约10个SVG,15个Textfield和6个微调器.此外,它有CSS来相应地渲染节点...它加载正常,没有错误或任何问题,但在显示场景之前需要一两秒钟.
我想这是由于节点数量同时被初始化.有没有办法在节点开始初始化之前显示场景?
注意:我的项目要求我在点击时导航到不同的场景.
从中选择ToggleButton
if(settings.isSelected()){
Stage stage = (Stage) mainWrapper.getScene().getWindow();
Parent root = FXMLLoader.load(getClass().getResource("/fxmlFiles/settings.fxml"));
stage.setScene(new Scene(root, Screen.getPrimary().getVisualBounds().getWidth(),
Screen.getPrimary().getVisualBounds().getHeight()));
stage.centerOnScreen();
//stage.setMaximized(true);
stage.show();
}
Run Code Online (Sandbox Code Playgroud)
fxmlFile
<FlowPane xmlns:fx="http://javafx.com/fxml"
fx:controller="controllers.motelInfoController"
stylesheets="/cssFiles/motelInfo.css"
fx:id="content">
<VBox fx:id="mainWrapper">
<VBox fx:id="validationWrapper">
<Label fx:id="validationLabel" visible="false"/>
</VBox>
<VBox fx:id="generalInfo">
<HBox> <!--First Row-->
<HBox>
<Group>
<SVGPath fx:id="iconMotelName" scaleX="0.05" scaleY="0.05" fill="white"/>
</Group>
<Group>
<TextField fx:id="miName" promptText="Motel Name"/>
</Group>
</HBox>
<HBox>
<Group>
<TextField fx:id="miFranchiseName" promptText="Franchise Name"/>
</Group>
</HBox>
</HBox>
<HBox> <!--Second Row-->
<HBox>
<Group>
<SVGPath fx:id="iconMotelAddress" scaleX="0.05" scaleY="0.05" fill="white"/>
</Group>
<Group>
<TextField …Run Code Online (Sandbox Code Playgroud) 我在相关fxml的控制器类中有这个功能.我需要在文本字段的焦点上触发此函数,但场景构建器没有类似于onfocusout的事件.如何使用控件类实现这一点?
@FXML
private void ValidateBikeNo(){
Tooltip error = new Tooltip("This bike no exists");
BikeNoIn.setTooltip(error);
}
Run Code Online (Sandbox Code Playgroud) 说我有一个控制器
@FXML private ObservableList<String> myStrings = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)
是否可以编写任何FXML,它将ListView myStrings与其项目连接起来?
我的第一次尝试是:
<ListView>
<items fx:id="myStrings"/>
</ListView>
Run Code Online (Sandbox Code Playgroud)
但是这种抱怨fx:id在那个位置上是无效的.我也试过了
<ListView items="${controller.myStrings}"/>
Run Code Online (Sandbox Code Playgroud)
......但它无法解决这个问题.
<ListView fx:id="myStringsListView"/>
// In controller
@FXML private ListView<String> myStringsListView;
@FXML public void initialize() {
myStringsListView.setItems(myStrings);
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在做的事情,但是间接和样板的数量在这里伤害了我.
我正在尝试编写一个小的rpg,我决定将基础知识放入fxml文档(带有其项目的MenuBar)中。因此,现在我计划在单击菜单项(字符,库存和设备)时打开一个新窗口,这样我可以显示一个额外的窗口。因此,我想将每个菜单的标题设置为与MenuItem上显示的Text等效。当然,我可以为每个菜单项添加一个额外的方法,但是我正在寻找一种可能性,可以在该菜单项中触发事件的菜单项的ID,因此可以使用其getText方法来获取标记。有人可以帮我吗?
我尝试使用“ this”访问对象,并且还考虑过使用枚举将ID连接到枚举MenuName的对象,因此我只需要在方法中放入一个开关,从而创建菜单,但这也没有实现。不能解决,因为在那里我无法检查哪个ID被解雇了。因此,对于我的程序的那部分,它没有帮助。
这是我的控制器类中的代码
public class Controller {
@FXML
private void menuIsClickedDefault(ActionEvent event) throws Exception {
Stage secondStage = new Stage();
Parent a = FXMLLoader.load(getClass().getResource("menus.fxml"));
secondStage.setTitle(HERES_MY_PROBLEM);
secondStage.setScene(new Scene(a, 646, 400));
secondStage.initModality(Modality.APPLICATION_MODAL);
secondStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
这些是我的fxml对象:
<MenuItem fx:id="stats" mnemonicParsing="false" text="Statistics" />
<MenuItem fx:id="inv" mnemonicParsing="false" text="Inventory" />
<MenuItem fx:id="equip" mnemonicParsing="false" text="Equipment" />
Run Code Online (Sandbox Code Playgroud)
我还没有将方法集成到对象中,因为如果不解决问题就没有意义,并且我知道其余代码也可以工作,原因是设置方法类似。
fxml ×10
javafx ×8
java ×3
javafx-2 ×3
javafx-8 ×3
scenebuilder ×2
css ×1
data-binding ×1
fxmlloader ×1
scrollpane ×1
tabpanel ×1
width ×1