Getting an error when trying to click the "Add" button in the Parts section of the mainwindow.fxml
Here's the error:
/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=51593:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/lib/tools.jar:/Users/wes/Dropbox/wes-WGU/software-i-c482/javafx/inventory-system-c482-wesley-oneal-2/out/production/InventorySystem-C482-wesley-oneal-2 wesleyoneal.inventoryapp.Main
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
... 49 more
Caused by: javafx.fxml.LoadException:
/Users/wes/Dropbox/wes-WGU/software-i-c482/javafx/inventory-system-c482-wesley-oneal-2/out/production/InventorySystem-C482-wesley-oneal-2/wesleyoneal/inventoryapp/addpart.fxml:18
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:103)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:932)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971)
at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at wesleyoneal.inventoryapp.mainController.addPartWindow(mainController.java:59)
... 59 more
Caused by: java.lang.InstantiationException: wesleyoneal.inventoryapp.Part
at java.lang.Class.newInstance(Class.java:427)
at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:927)
... 72 more
Caused by: java.lang.NoSuchMethodException: wesleyoneal.inventoryapp.Part.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 74 more
Process finished with exit code 0
I've looked at line 18 in the addpart.fxml where it says it's having issues, but everything there looks correct from what I can tell
Main.java:
package wesleyoneal.inventoryapp;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("mainwindow.fxml"));
primaryStage.setScene(new Scene(root, 1180, 472));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
mainController:
package wesleyoneal.inventoryapp;
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.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class mainController implements Initializable {
@FXML
private TableView<Part> partsTable;
@FXML
private TableColumn<Part, Integer> partIdColumn;
@FXML
private TableColumn<Part, String> partNameColumn;
@FXML
private TableColumn<Part, Integer> partInvLevel;
@FXML
private TableColumn<Part, Double> partPriceCostColumn;
@Override
public void initialize(URL location, ResourceBundle resources) {
partIdColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
partNameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
partInvLevel.setCellValueFactory(new PropertyValueFactory<>("stock"));
partPriceCostColumn.setCellValueFactory(new PropertyValueFactory<>("price"));
partsTable.setItems(getParts());
}
public ObservableList<Part> getParts() {
ObservableList<Part> partsList = FXCollections.observableArrayList();
partsList.add(new InHousePart(1, "Part A", 1.99, 11, 1, 21, 1111));
partsList.add(new InHousePart(2, "Part B", 2.99, 12, 2, 22, 2222));
partsList.add(new OutsourcedPart(3, "Part C", 3.99, 13, 3, 33,
"Wes' Company"));
partsList.add(new OutsourcedPart(4, "Part D", 4.99, 14, 4, 44,
"Wes' Company"));
return partsList;
}
@FXML
private void addPartWindow(ActionEvent event) throws IOException {
Parent addPartParent = FXMLLoader.load(getClass().getResource("addpart.fxml"));
Scene addPartScene = new Scene(addPartParent);
Stage addPartStage = (Stage) ((Node) event.getSource()).getScene().getWindow();
addPartStage.setScene(addPartScene);
addPartStage.show();
}
}
mainwindow.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.shape.Rectangle?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<GridPane fx:id="mainGridPane" alignment="center" hgap="10" style="-fx-background-color: lightgrey;" vgap="10.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="wesleyoneal.inventoryapp.mainController">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints maxWidth="600.0" minWidth="560.0" prefWidth="600.0" />
<ColumnConstraints maxWidth="0.0" minWidth="0.0" prefWidth="0.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints maxHeight="0.0" minHeight="0.0" prefHeight="0.0" />
<RowConstraints maxHeight="0.0" minHeight="0.0" prefHeight="0.0" />
</rowConstraints>
<children>
<Label text="Inventory Management System" textFill="#494980">
<font>
<Font name="Helvetica Bold" size="16.0" />
</font>
<GridPane.margin>
<Insets bottom="30.0" left="40.0" top="30.0" />
</GridPane.margin>
</Label>
<Rectangle arcHeight="15.0" arcWidth="15.0" fill="#1f93ff00" height="260.0" stroke="#949494" strokeType="INSIDE" width="520.0" GridPane.rowIndex="1" GridPane.rowSpan="3">
<GridPane.margin>
<Insets left="40.0" />
</GridPane.margin>
</Rectangle>
<TableView fx:id="partsTable" maxWidth="480.0" prefHeight="140.0" prefWidth="480.0" GridPane.rowIndex="2">
<columns>
<TableColumn fx:id="partIdColumn" maxWidth="120.0" prefWidth="120.0" text="Part ID" />
<TableColumn fx:id="partNameColumn" maxWidth="120.0" prefWidth="120.0" text="Part Name" />
<TableColumn fx:id="partInvLevel" maxWidth="120.0" prefWidth="120.0" text="Inventory Level" />
<TableColumn fx:id="partPriceCostColumn" maxWidth="120.0" prefWidth="120.0" text="Price/Cost per Unit" />
</columns>
<GridPane.margin>
<Insets left="60.0" />
</GridPane.margin>
</TableView>
<ButtonBar maxWidth="480.0" prefHeight="40.0" prefWidth="250.0" GridPane.rowIndex="3">
<buttons>
<Button mnemonicParsing="false" onAction="#addPartWindow" text="Add" />
<Button mnemonicParsing="false" text="Modify" />
<Button mnemonicParsing="false" text="Delete" />
</buttons>
<GridPane.margin>
<Insets bottom="10.0" left="30.0" />
</GridPane.margin>
</ButtonBar>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Parts" GridPane.rowIndex="1">
<GridPane.margin>
<Insets bottom="10.0" left="70.0" top="20.0" />
</GridPane.margin>
<font>
<Font name="Helvetica Bold" size="16.0" />
</font>
</Text>
<Button mnemonicParsing="false" text="Search" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="260.0" top="10.0" />
</GridPane.margin>
</Button>
<TextField maxWidth="200.0" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="340.0" top="11.0" />
</GridPane.margin>
</TextField>
<Rectangle arcHeight="15.0" arcWidth="15.0" fill="#1f93ff00" height="260.0" stroke="#949494" strokeType="INSIDE" width="520.0" GridPane.columnIndex="1" GridPane.rowIndex="1" GridPane.rowSpan="3">
<GridPane.margin>
<Insets left="40.0" />
</GridPane.margin>
</Rectangle>
<TableView fx:id="productsTable" maxWidth="480.0" prefHeight="140.0" prefWidth="480.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
<columns>
<TableColumn prefWidth="120.0" text="Part ID" />
<TableColumn prefWidth="120.0" text="Part Name" />
<TableColumn prefWidth="120.0" text="Inventory Level" />
<TableColumn prefWidth="120.0" text="Price per Unit" />
</columns>
<GridPane.margin>
<Insets left="60.0" />
</GridPane.margin>
</TableView>
<ButtonBar maxWidth="480.0" prefHeight="40.0" prefWidth="250.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
<buttons>
<Button mnemonicParsing="false" text="Add" />
<Button mnemonicParsing="false" text="Modify" />
<Button mnemonicParsing="false" text="Delete" />
</buttons>
<GridPane.margin>
<Insets bottom="10.0" left="30.0" />
</GridPane.margin>
</ButtonBar>
<Button mnemonicParsing="false" text="Search" GridPane.columnIndex="1" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="260.0" top="10.0" />
</GridPane.margin>
</Button>
<TextField maxWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="340.0" top="11.0" />
</GridPane.margin>
</TextField>
<Button mnemonicParsing="false" text="Exit" GridPane.columnIndex="1" GridPane.halignment="RIGHT" GridPane.rowIndex="4">
<GridPane.margin>
<Insets right="60.0" top="10.0" />
</GridPane.margin>
</Button>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Products" GridPane.columnIndex="1" GridPane.rowIndex="1">
<font>
<Font name="Helvetica Bold" size="16.0" />
</font>
<GridPane.margin>
<Insets bottom="10.0" left="70.0" top="20.0" />
</GridPane.margin>
</Text>
</children>
</GridPane>
addpart.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.Group?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<GridPane fx:id="partGrid" style="-fx-background-color: lightgrey;" xmlns="http://javafx.com/javafx/8.0.171"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="wesleyoneal.inventoryapp.Part">
<columnConstraints>
<ColumnConstraints/>
<ColumnConstraints/>
<ColumnConstraints/>
</columnConstraints>
<rowConstraints>
<RowConstraints/>
<RowConstraints prefHeight="60.0"/>
<RowConstraints prefHeight="60.0"/>
<RowConstraints prefHeight="60.0"/>
<RowConstraints minHeight="10.0" prefHeight="60.0"/>
<RowConstraints minHeight="10.0" prefHeight="60.0"/>
<RowConstraints minHeight="10.0" prefHeight="60.0"/>
<RowConstraints minHeight="10.0"/>
</rowConstraints>
<children>
<Label text="Add Part" textFill="#494980">
<font>
<Font name="Helvetica Bold" size="16.0"/>
</font>
<GridPane.margin>
<Insets bottom="30.0" left="40.0" top="30.0"/>
</GridPane.margin>
</Label>
<Text id="partIdLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="ID" GridPane.rowIndex="1">
<GridPane.margin>
<Insets bottom="10.0" left="80.0" top="10.0"/>
</GridPane.margin>
</Text>
<Text id="partNameLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="Name" GridPane.rowIndex="2">
<GridPane.margin>
<Insets bottom="10.0" left="80.0" top="10.0"/>
</GridPane.margin>
</Text>
<Text id="partInvLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="Inv" GridPane.rowIndex="3">
<GridPane.margin>
<Insets bottom="10.0" left="80.0" top="10.0"/>
</GridPane.margin>
</Text>
<Text id="partPriceCostLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="Price/Cost" GridPane.rowIndex="4">
<GridPane.margin>
<Insets bottom="10.0" left="80.0" top="10.0"/>
</GridPane.margin>
</Text>
<Text id="partMaxLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="Max" GridPane.rowIndex="5">
<GridPane.margin>
<Insets bottom="10.0" left="80.0" top="10.0"/>
</GridPane.margin>
</Text>
<Text id="partMinLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="Min" GridPane.columnIndex="1"
GridPane.columnSpan="2" GridPane.rowIndex="5">
<GridPane.margin>
<Insets left="180.0"/>
</GridPane.margin>
</Text>
<Text id="partCompanyNameLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="Company Name"
GridPane.rowIndex="6">
<GridPane.margin>
<Insets bottom="10.0" left="80.0" top="10.0"/>
</GridPane.margin>
</Text>
<Text id="partMachineIdLabel" strokeType="OUTSIDE" strokeWidth="0.0" text="Machine ID" GridPane.rowIndex="6">
<GridPane.margin>
<Insets bottom="10.0" left="80.0" top="10.0"/>
</GridPane.margin>
</Text>
<ButtonBar prefHeight="40.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.halignment="RIGHT"
GridPane.rowIndex="7">
<buttons>
<Button mnemonicParsing="false" text="Save"/>
<Button mnemonicParsing="false" text="Cancel"/>
</buttons>
<GridPane.margin>
<Insets bottom="20.0" right="30.0"/>
</GridPane.margin>
</ButtonBar>
<Group GridPane.columnIndex="1" GridPane.columnSpan="2">
<children>
<RadioButton fx:id="partInHouseButton" mnemonicParsing="false"
prefWidth="100.0" selected="true" text="In-House">
<toggleGroup>
<ToggleGroup fx:id="addPartToggleGroup"/>
</toggleGroup>
</RadioButton>
<RadioButton fx:id="partOutsourcedButton" layoutX="183.0" mnemonicParsing="false"
prefWidth="100.0" text="Outsourced"
toggleGroup="$addPartToggleGroup"/>
</children>
</Group>
<TextField id="partIdField" editable="false" prefHeight="40.0"
style="-fx-background-color: lightgrey; -fx-border-color: grey;" text="Auto Gen - Disabled"
GridPane.columnIndex="1" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="20.0"/>
</GridPane.margin>
</TextField>
<TextField id="partNameField" prefHeight="40.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
<GridPane.margin>
<Insets left="20.0"/>
</GridPane.margin>
</TextField>
<TextField id="partInvField" prefHeight="40.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
<GridPane.margin>
<Insets left="20.0"/>
</GridPane.margin>
</TextField>
<TextField id="partPriceCostField" prefHeight="40.0" GridPane.columnIndex="1" GridPane.rowIndex="4">
<GridPane.margin>
<Insets left="20.0"/>
</GridPane.margin>
</TextField>
<TextField id="partMaxField" maxWidth="120.0" prefHeight="40.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
<GridPane.margin>
<Insets left="20.0"/>
</GridPane.margin>
</TextField>
<TextField id="partMinField" maxWidth="120.0" prefHeight="40.0" GridPane.columnIndex="2" GridPane.rowIndex="5">
<GridPane.margin>
<Insets left="40.0" right="40.0"/>
</GridPane.margin>
</TextField>
<TextField id="partCompanyNameField" prefHeight="40.0" GridPane.columnIndex="1" GridPane.rowIndex="6">
<GridPane.margin>
<Insets left="20.0"/>
</GridPane.margin>
</TextField>
<TextField id="partMachineIdField" prefHeight="40.0" GridPane.columnIndex="1" GridPane.rowIndex="6">
<GridPane.margin>
<Insets left="20.0"/>
</GridPane.margin>
</TextField>
</children>
</GridPane>
Part.java:
package wesleyoneal.inventoryapp;
public abstract class Part {
private int id;
private String name;
private double price;
private int stock;
private int min;
private int max;
public Part(int id, String name, double price, int stock, int min, int max) {
this.id = id;
this.name = name;
this.price = price;
this.stock = stock;
this.min = min;
this.max = max;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public int getMin() {
return min;
}
public void setMin(int min) {
this.min = min;
}
public int getMax() {
return max;
}
public void setMax(int max) {
this.max = max;
}
}
InHousePart.java:
package wesleyoneal.inventoryapp;
public class InHousePart extends Part {
private int machineId;
public InHousePart(int id, String name, double price, int stock, int min, int max, int machineId) {
super(id, name, price, stock, min, max);
this.machineId = machineId;
}
public int getMachineId() {
return machineId;
}
public void setMachineId(int machineId) {
this.machineId = machineId;
}
}
Outsourcedpart.java:
package wesleyoneal.inventoryapp;
public class OutsourcedPart extends Part {
private String companyName;
public OutsourcedPart(int id, String name, double price, int stock, int min, int max, String companyName) {
super(id, name, price, stock, min, max);
this.companyName = companyName;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
}