- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我尝试从主屏幕(一个 TableView)转到另一个包含文本框的场景时,我收到一个 NullPointer 异常。所有 fxml 对象都被考虑在内,当我删除 setCellFactory 值时,它会发生转换,但没有显示任何项目。
我尝试遵循: 1. 映射所有 fxml 项以确保其不为空。 2. 将所有产品显示功能分为不同的类。
Main.java
package shoppingcart;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
public class Main extends Application {
//Initializing Main Window
Stage mainWindow;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
mainWindow = primaryStage;
Parent root = FXMLLoader.load(getClass().getResource("shoppingcart.fxml"));
mainWindow.setScene(new Scene(root));
mainWindow.show();
}
}
产品.java
package shoppingcart;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
public class Products {
//Variables used to populated Shopping Cart Table
private SimpleStringProperty itemName;
private SimpleStringProperty itemPriority;
private SimpleIntegerProperty itemQty;
private SimpleDoubleProperty itemPrice;
public Products(String itemName, double itemPrice, String itemPriority, int itemQty) {
this.itemName = new SimpleStringProperty(itemName);
this.itemPrice = new SimpleDoubleProperty(itemPrice);
this.itemPriority = new SimpleStringProperty(itemPriority);
this.itemQty = new SimpleIntegerProperty(itemQty);
}
public String getItemName() {
return itemName.get();
}
public void setItemName(String itemName) {
this.itemName = new SimpleStringProperty(itemName);
}
public String getItemPriority() {
return itemPriority.get();
}
public void setItemPriority(String itemPriority) {
this.itemPriority = new SimpleStringProperty(itemPriority);
}
public int getItemQty() {
return itemQty.get();
}
public void setItemQty(int itemQty) {
this.itemQty = new SimpleIntegerProperty(itemQty);
}
public double getItemPrice() {
return itemPrice.get();
}
public void setItemPrice(double itemPrice) {
this.itemPrice = new SimpleDoubleProperty(itemPrice);
}
public String toString() {
return String.format("%s %s", itemName, itemPriority);
}
}
Controller.java
package shoppingcart;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable {
//Capturing textfields used on Form
@FXML
private TextField productName;
@FXML
private TextField productQty;
@FXML
private TextField productPrice;
@FXML
private TextField productPriority;
@FXML
private AnchorPane productPage;
@FXML
private Button productAdd;
@FXML
private Button productHome;
@FXML
private Text labelitemName;
@FXML
private Text labelitemPriority;
@FXML
private Text labelitemQty;
@FXML
private Text labelitemPrice;
//Table used for Shopping Cart
@FXML
private TableView<Products> item_Table;
@FXML
private TableColumn<Products, String> item_Priority;
@FXML
private TableColumn<Products, String> item_Name;
@FXML
private TableColumn<Products, Integer> item_Qty;
@FXML
private TableColumn<Products, Double> item_Price;
//The Initializer used to load data prior to loading view.
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
item_Priority.setCellValueFactory(new PropertyValueFactory<Products, String>("ItemPriority"));
item_Name.setCellValueFactory(new PropertyValueFactory<Products, String>("ItemName"));
item_Qty.setCellValueFactory(new PropertyValueFactory<Products, Integer>("ItemQty"));
item_Price.setCellValueFactory(new PropertyValueFactory<Products, Double>("ItemPrice"));
item_Table.setItems(getProduct());
System.out.println("Loading user data.");
}
// Method used to get the list of products
public ObservableList<Products> getProduct() {
ObservableList<Products> products = FXCollections.observableArrayList();
products.add(new Products("Orange", 2.00, "1", 1));
return products;
}
public void addItems(ActionEvent event) throws IOException {
Parent addItem_page = FXMLLoader.load(getClass().getResource("addItem.fxml"));
Scene addItem_scene = new Scene(addItem_page);
Stage addItem_stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
addItem_stage.setScene(addItem_scene);
addItem_stage.show();
System.out.println("Displaying information to console: Ensuring the addItem method worked as expected.");
}
public void handleitemAdd() {
System.out.println("Added item to cart test");
}
public void handleitemReturnCart(ActionEvent event) throws IOException {
Parent shoppingCart_page = FXMLLoader.load(getClass().getResource("shoppingcart.fxml"));
Scene shoppingCart_scene = new Scene(shoppingCart_page);
Stage shoppingCart_stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
shoppingCart_stage.setScene(shoppingCart_scene);
shoppingCart_stage.show();
System.out.println("Displaying information to console: Ensuring that user returned to main page");
}
public void handleitemDelete (ActionEvent event) throws IOException {
System.out.println("Displaying information to console: Deleting Selected Item");
}
}
addItem.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.*?>
<?import javafx.scene.text.Text?>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" id="" fx:id="productPage" prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/2.2" fx:controller="shoppingcart.Controller">
<children>
<TextField id="" fx:id="productName" layoutX="235.0" layoutY="118.0" prefWidth="200.0"/>
<TextField id="" fx:id="productPrice" layoutX="235.0" layoutY="222.0" prefWidth="200.0"/>
<TextField id="" fx:id="productQty" layoutX="235.0" layoutY="175.0" prefWidth="200.0"/>
<TextField id="" fx:id="productPriority" layoutX="235.0" layoutY="64.0" prefWidth="200.0"/>
<Text id="" fx:id="labelitemName" layoutX="85.0" layoutY="144.0" strokeType="OUTSIDE" strokeWidth="0.0"
text="Item Name:"/>
<Text id="" fx:id="labelitemQty" layoutX="111.0" layoutY="207.0" strokeType="OUTSIDE" strokeWidth="0.0"
text="Item Qty:"/>
<Text id="" fx:id="labelitemPriority" layoutX="79.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0"
text="Item Priority:"/>
<Text id="" fx:id="labelitemPrice" layoutX="97.0" layoutY="251.0" scaleX="1.0" scaleY="0.9999961759667156"
strokeType="OUTSIDE" strokeWidth="0.0" text="Item Price:"/>
<Button id="itemsAdd" fx:id="productAdd" layoutX="235.0" layoutY="287.0" onAction="#handleitemAdd" text="ADD"/>
<Button id="returnCartHome" fx:id="productHome" layoutX="344.0" layoutY="287.0" mnemonicParsing="false"
onAction="#handleitemReturnCart" text="Return to Cart"/>
</children>
</AnchorPane>
shoppingCart.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.*?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/2.2" fx:controller="shoppingcart.Controller">
<Button fx:id="itemsAdd" layoutX="29.0" layoutY="352.0" onAction="#addItems" text="Add Items to Cart"/>
<TableView fx:id="item_Table" layoutX="29.0" layoutY="64.0" prefHeight="272.0" prefWidth="542.0"
tableMenuButtonVisible="true">
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
</columnResizePolicy>
<columns>
<TableColumn editable="false" prefWidth="75.0" text="Priority" fx:id="item_Priority"/>
<TableColumn editable="false" prefWidth="75.0" text="Item Name" fx:id="item_Name"/>
<TableColumn editable="false" prefWidth="75.0" text="Item Qty" fx:id="item_Qty"/>
<TableColumn editable="false" prefWidth="75.0" text="Price" fx:id="item_Price"/>
</columns>
</TableView>
<Text layoutX="44.0" layoutY="43.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Shopping Cart Application"
wrappingWidth="513.0000000000001">
<font>
<Font size="44.0"/>
</font>
</Text>
<Button id="itemsDelete" layoutX="312.0" layoutY="352.0" mnemonicParsing="false" onAction="#handleitemDelete"
text="Delete Selected Item"/>
</AnchorPane>
Caused by: java.lang.NullPointerException
at assignment_3/shoppingcart.Controller.initialize(Controller.java:74)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
最佳答案
addItem.fxml
和 shoppingcart.fxml
使用相同的 Controller 检查您的两个 fx:controller
标记,您会发现它们都指向同一个 Controller 。
对于 shoppingcart.fxml
,它可以工作,因为 Controller 是为该 fxml 文件制作的。但对于 addItem.fxml
文件,会创建另一个 Controller
实例,并且在该 fxml 文件中,元素 item_Priority
(和 friend )未定义,因此它们不会注入(inject) Controller 中。
有两种解决方案:
AddItemController
来专门处理 addItem.fxml
并将所有逻辑移至那里,或者...在 initialize
方法中,检查 itemTable
是否不为 null,并在这种情况下执行某些操作
@Override public void initialize(URL url, ResourceBundle resourceBundle) {
if (item_Table != null) {
item_Priority.setCellValueFactory(new PropertyValueFactory<Products, String>("ItemPriority"));
item_Name.setCellValueFactory(new PropertyValueFactory<Products, String>("ItemName"));
item_Qty.setCellValueFactory(new PropertyValueFactory<Products, Integer>("ItemQty"));
item_Price.setCellValueFactory(new PropertyValueFactory<Products, Double>("ItemPrice"));
item_Table.setItems(getProduct());
}
}
为了方便使用,我肯定会使用解决方案1。
关于JavaFX - 切换到新场景时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161740/
我的应用程序从一个有 5 个选项卡的选项卡栏 Controller 开始。一开始,第一个出现了它的名字,但其他四个没有名字,直到我点击它们。然后根据用户使用的语言显示名称。如何在选项卡栏出现之前设置选
我有嵌套数组 json 对象(第 1 层、第 2 层和第 3 层)。我的问题是数据表没有出现。任何相关的 CDN 均已导入。该表仅显示部分。我引用了很多网站,但都没有解决我的问题。 之前我使用标准表来
我正在尝试设置要显示的 Parse PFLoginViewController。这是我的一个 View Controller 的类。 import UIKit import Parse import
我遇到了这个问题,我绘制的对象没有出现在 GUI 中。我知道它正在被处理,因为数据被推送到日志文件。但是,图形没有出现。 这是我的一些代码: public static void main(Strin
我有一个树状图,其中包含出现这样的词...... TreeMap occurrence = new TreeMap (); 字符串 = 单词 整数 = 出现次数。 我如何获得最大出现次数 - 整数,
因此,我提示用户输入变量。如果变量小于 0 且大于 10。如果用户输入 10,我想要求用户再次输入数字。我问时间的时候输入4,它说你输入错误。但在第二次尝试时效果很好。例如:如果我输入 25,它会打印
我已经用 css overflow 属性做了一个例子。在这个例子中我遇到了一个溢出滚动的问题。滚动条出现了,但没有工作意味着每当将光标移动到滚动条时,在这个滚动条不活动的时间。我对此一无所知,所以请帮
我现在正在做一个元素。当您单击一个元素时,会出现以下信息,我想知道如何在您单击下一个元素而不重新单击同一元素时使其消失....例如,我的元素中有披萨,我想单击肉披萨看到浇头然后点击奶酪披萨看到浇头和肉
我有一个路由器模块,它将主题与正则表达式进行比较,并将出现的事件与一致的键掩码链接起来。 (它是一个简单的 url 路由过滤,如 symfony http://symfony.com/doc/curr
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: mysql_fetch_array() expects parameter 1 to be resource, bo
我在底部有一个带有工具栏的 View ,我正在使用 NavigationLink 导航到该 View 。但是当 View 出现时,工具栏显示得有点太低了。大约半秒钟后,它突然跳到位。它只会在应用程序启
我试图在我的应用程序上为背景音乐添加一个 AVAudioPlayer,我正在主屏幕上启动播放器,尝试在应用程序打开时开始播放但出现意外行为... 它播放并立即不断创建新玩家并播放这些玩家,因此同时播放
这是获取一个数字,获取其阶乘并将其加倍,但是由于基本情况,如果您输入 0,它会给出 2 作为答案,因此为了绕过它,我使用了 if 语句,但收到错误输入“if”时解析错误。如果你们能提供帮助,我真的很感
暂停期间抛出异常 android.os.DeadObjectException 在 android.os.BinderProxy.transactNative( native 方法) 在 androi
我已经为猜词游戏编写了一些代码。它从用户输入中读取字符并在单词中搜索该字符;根据字符是否在单词中,程序返回并控制一些变量。 代码如下: import java.util.Random; import
我是自动化领域的新手。这是我的简单 TestNG 登录代码,当我以 TestNG 身份运行该代码时,它会出现 java.lang.NullPointerException,双击它会突出显示我导航到 U
我是c#程序员,我习惯了c#的封装语法和其他东西。但是现在,由于某些原因,我应该用java写一些东西,我现在正在练习java一天!我要创建一个为我自己创建一个虚拟项目,以便让自己更熟悉 Java 的
我正在使用 Intellij,我的源类是 main.com.coding,我的资源文件是 main.com.testing。我将 spring.xml 文件放入资源文件中。 我的测试类位于 test.
我想要我的tests folder separate到我的应用程序代码。我的项目结构是这样的 myproject/ myproject/ myproject.py moduleon
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 6 年前。 因此,我尝试比较 2 个值,一个
我是一名优秀的程序员,十分优秀!