当前位置: 首页 > 知识库问答 >
问题:

在单击按钮时,在边框窗格中心内设置Vbox时出错

谢同化
2023-03-14

我正在设计一个javafx应用程序,使用BorderPane作为Rootlayout。单击它时,我需要将borderpane(rootlayout)中心设置为不同的addprodct.fxml。我想在BorderPane中心点击插入按钮添加一个vbox。

        FXMLLoader loader = new FXMLLoader();
        System.out.println("view folder: " + RootController.class.getResource("/Views/AddProduct.fxml"));
        loader.setLocation(RootController.class.getResource( "/Views/AddProduct.fxml"));
        tryvbox = loader.load();
        main.getPrimaryStage().setScene(new Scene(tryvbox));

是的,我知道同样的问题已经被问过了,但我执行了给出的解决方案,对我的问题没有帮助。在borderpane中心加载新的fxml

JavaFX:如何用新值更新borderpane的中心视图

Main.java


    package sample;

    import Controllers.RootController;
    import javafx.application.Application;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Scene;
    import javafx.scene.layout.BorderPane;
    import javafx.stage.Stage;
    import java.io.IOException;


    public class Main extends Application {
        @FXML
        private BorderPane rootLayout;
        private Stage  primaryStage;
        @Override
        public void start(Stage primaryStage) throws Exception{
            this.primaryStage = primaryStage;
            mainwindow();
        }
        public void mainwindow() throws IOException {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("/Views/Rootlayout.fxml"));
            rootLayout = loader.load();

            RootController rootController = loader.getController();
            rootController.setMain(this);
            Scene scene= new Scene(rootLayout);
            primaryStage.setTitle("Inventory Manager");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
        public BorderPane getRootLayout() {
            return rootLayout;
        }

        public Stage getPrimaryStage() {
            return primaryStage;
        }

        public static void main(String[] args) {
            launch(args);
        }
    }

package Controllers;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import sample.Main;

import java.io.IOException;

public class RootController {
    @FXML
    private Button rootBtnInsrt;
    @FXML
    private Button rootBtnUpdate;
    @FXML
    private BorderPane rootLayout;
    private Main main;

    public void setMain(Main main) {
        this.main = main;
    }

    @FXML
    void btnInsrtClick(MouseEvent event) {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(RootController.class.getResource( "/Views/AddProduct.fxml"));
        try {
            VBox addProduct1 = loader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }

        AddProductController addProductController= loader.getController();
        addProductController.setMain(main);
        main.getRootLayout().setCenter(rootLayout);
    }
}
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>

<BorderPane fx:id="rootLayout" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controllers.RootController">
   <top>
      <MenuBar prefHeight="21.0" prefWidth="600.0" BorderPane.alignment="CENTER">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Edit">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
   <bottom>
      <AnchorPane prefHeight="29.0" prefWidth="600.0" style="-fx-background-color: Black;" BorderPane.alignment="CENTER" />
   </bottom>
   <left>
      <VBox alignment="CENTER" prefHeight="345.0" prefWidth="164.0" spacing="20.0" BorderPane.alignment="CENTER">
         <children>
            <Button fx:id="rootBtnInsrt" mnemonicParsing="false" onMouseClicked="#btnInsrtClick" prefHeight="50.0" prefWidth="132.0" text="Insert " />
            <Button fx:id="rootBtnUpdate" mnemonicParsing="false" onMouseClicked="#btnUpdateClick" prefHeight="50.0" prefWidth="135.0" text="Update" />
            <Button mnemonicParsing="false" prefHeight="50.0" prefWidth="158.0" text="View" />
         </children>
         <padding>
            <Insets left="10.0" right="10.0" />
         </padding>
      </VBox>
   </left>
</BorderPane>

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>

<VBox fx:id="addproduct" alignment="CENTER" prefHeight="249.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label alignment="CENTER" text="Add Product" VBox.vgrow="ALWAYS" />
      <GridPane VBox.vgrow="ALWAYS">
         <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
         </columnConstraints>
         <rowConstraints>
            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
         </rowConstraints>
         <children>
            <Label text="Product Code" />
            <Label text="Product Name :" GridPane.rowIndex="1" />
            <Label text="Product Price :" GridPane.rowIndex="2" />
            <Label text="Product Quantity :" GridPane.rowIndex="3" />
            <TextField GridPane.columnIndex="1" />
            <TextField GridPane.columnIndex="1" GridPane.rowIndex="1" />
            <TextField GridPane.columnIndex="1" GridPane.rowIndex="2" />
            <TextField GridPane.columnIndex="1" GridPane.rowIndex="3" />
         </children>
         <padding>
            <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
         </padding>
      </GridPane>
      <HBox alignment="CENTER" spacing="30.0">
         <children>
          <Button alignment="CENTER" maxHeight="40.0" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="ADD" HBox.hgrow="ALWAYS" />
            <Button alignment="CENTER" maxHeight="40.0" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Reset" HBox.hgrow="ALWAYS" />
            <Button maxHeight="40.0" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Back" HBox.hgrow="ALWAYS" />
         </children>
         <padding>
            <Insets bottom="20.0" left="20.0" right="20.0" />
         </padding>
      </HBox>
   </children>
</VBox>
  1. 线程“JavaFX Application thread”java.lang.RuntimeException:java.lang.Reflect.InvocationTargetException
  2. 由:java.lang.reflect.InvocationTargetException
  3. 引起
  4. 由:java.lang.NullPointerException
  5. 引起

所有在相同的错误窗格这是我的目录结构。目录结构

共有1个答案

单于阳
2023-03-14

所以基本上在所有的工作和帮助之后,由于try/catch块出现了问题。

FXMLLoader loader = new FXMLLoader();
loader.setLocation(RootController.class.getResource( "/Views/AddProduct.fxml"));
    try {
        VBox addProduct1 = loader.load();
    } 
    catch (IOException e) {
        e.printStackTrace();
    }

我删除了try/catch并向该方法添加了exception,即void btnInsrtClick(MouseEvent event)throws ioexception

 类似资料:
  • 我在Python Selenium中出错了。我正在尝试下载所有歌曲与硒,但有一些错误。下面是代码: 下面是错误: 你知道为什么会出错吗?

  • 问题内容: 我希望能够在单击该框架的JPanels之一中的按钮之后设置JFrame的contentpane。 我的体系结构由一个控制器创建,该控制器创建JFrame和其中的第一个JPanel。在第一个JPanel中,我正在调用一个方法:控制器上的setcontentpane(JPanel jpanel)。但是,除了加载传递的JPanel之外,它什么也不做,而是删除所有面板(请参见下面的代码) 第一

  • 我扩展了ControlsFX对话框以创建自定义验证对话框。我添加了一些自定义按钮,其中一个在单击后触发验证操作。如果验证通过,对话框将以OK结果关闭,但如果对话框无效,则会为对话框结果操作分配一个虚拟操作对象。它的目的(dumy result)只是保存用户试图填充对话框的信息,并允许用户进行一些更正(而不是关闭窗口)。一切都会好的,但有一种情况会产生错误的结果。若用户将用错误数据填写表单,则单击验

  • 如果你点击按钮,你会看到一个蓝色的边框,这对我来说真的很烦。对于如何让它消失/根本不出现,你有什么解决方案吗?

  • 我有一个FragmentActivity,它可以包含用户想要的任意多个ListFragments。ListFragments在HorizontalScrollView中并排排列(在ActionBar中选择一个选项时)。每个ListFragment项都包含一个TextView和一个按钮。单击按钮可更改按钮的ViewParent(包含按钮和TextView的线性布局)的背景色。 现在,单击每个List

  • 在我的APCS课程中,我们正在学习如何编写GUI。我们已经学习了如何制作按钮和将背景色改为绿色、红色、蓝色等。然而,我的老师在这周剩下的时间里不会在这里,我只是好奇如何通过单击按钮使文本出现在框架内,并在再次单击按钮时使文本消失。如果有帮助,下面是代码。我想改变背景颜色为绿色以及显示“绿色”在屏幕上。非常感谢你的帮助! }