簡體   English   中英

NetBeans-Java FXML-視圖不想打開

[英]NetBeans - Java FXML - View does not want to open

我遇到以下情況:(1)歡迎屏幕,其中一個按鈕指向第二個屏幕。 (2)主屏幕具有許多組件和代碼。

(1)按鈕上僅具有loadSecondScreen()函數,該函數沒有問題,但是第二個屏幕從不加載,因為控制台狀態表明FXML文件中存在未知錯誤。

compile:
run:
SYSTEEMFOUT bij laden ledenbeheer:
/D:/Git/master/VIVESbikeGIT/build/classes/ui/view/LedenBeheer.fxml

但是,當我檢查相應的FXML文件時,沒有任何錯誤或問題,請知道它以前已經起作用。 這可能是什么問題?

 package ui.controller; import java.net.URL; import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import ui.VIVESbike; /** * FXML Controller class * * @author MV */ public class StartschermController implements Initializable { // referentie naar VIVESbike (main) private VIVESbike parent; // Functionaliteit knop Ledenbeheer @FXML public void laadLeden() { parent.showLedenbeheer(); } /** * Initializes the controller class. * @param url */ @Override public void initialize(URL url, ResourceBundle rb) { // TODO } /** * Referentie naar parent (start) instellen * * @param p referentie naar de runnable class die alle oproepen naar de * schermen bestuurt */ public void setParent(VIVESbike p) { parent = p; } } 

 <?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.CheckBox?> <?import javafx.scene.control.DatePicker?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.RadioButton?> <?import javafx.scene.control.TableColumn?> <?import javafx.scene.control.TableView?> <?import javafx.scene.control.TextArea?> <?import javafx.scene.control.TextField?> <?import javafx.scene.control.ToggleGroup?> <?import javafx.scene.control.cell.PropertyValueFactory?> <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.FlowPane?> <?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.text.Font?> <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="676.0" prefWidth="801.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.controller.LedenBeheerController"> <center> <GridPane BorderPane.alignment="CENTER"> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> </columnConstraints> <rowConstraints> <RowConstraints /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> <BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1"> <center> <TableView fx:id="tvLedenoverzicht" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER"> <columns> <TableColumn prefWidth="99.0" text="Voornaam"> <cellValueFactory> <PropertyValueFactory property="voornaam" /> </cellValueFactory> </TableColumn> <TableColumn prefWidth="97.0" text="Naam"> <cellValueFactory> <PropertyValueFactory property="naam" /> </cellValueFactory> </TableColumn> <TableColumn minWidth="0.0" prefWidth="184.0" text="Rijksregisternummer"> <cellValueFactory> <PropertyValueFactory property="rijksregisternummer" /> </cellValueFactory> </TableColumn> </columns> </TableView> </center> <bottom> <FlowPane alignment="CENTER" columnHalignment="CENTER" hgap="20.0" prefHeight="50.0" prefWidth="200.0" BorderPane.alignment="CENTER"> <children> <Button mnemonicParsing="false" onAction="#lidToevoegen" text="Lid toevoegen" /> <Button mnemonicParsing="false" onAction="#lidUitschrijven" text="Lid uitschrijven" /> <Button mnemonicParsing="false" onAction="#lidWijzigen" text="Lid wijzigen" /> </children> </FlowPane> </bottom> <GridPane.margin> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </GridPane.margin> </BorderPane> <BorderPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1"> <center> <FlowPane orientation="VERTICAL" prefHeight="200.0" prefWidth="200.0" vgap="20.0"> <children> <GridPane hgap="20.0" vgap="20.0"> <children> <TextField fx:id="tfVoornaam" disable="true" promptText="Voornaam" GridPane.rowIndex="1" /> <TextField fx:id="tfNaam" disable="true" promptText="Naam" GridPane.columnIndex="1" GridPane.rowIndex="1" /> <TextField fx:id="tfRijksregisternummer" disable="true" promptText="Rijksregisternummer" GridPane.columnSpan="2" /> <TextField fx:id="tfEmail" disable="true" promptText="Email" GridPane.rowIndex="2" /> <TextField fx:id="tfTelefoon" disable="true" promptText="Telefoon" GridPane.columnIndex="1" GridPane.rowIndex="2" /> <DatePicker fx:id="dpStartdatum" disable="true" editable="false" promptText="Startdatum" GridPane.columnSpan="2" GridPane.rowIndex="3" /> <VBox spacing="10.0" GridPane.columnIndex="1" GridPane.rowIndex="4"> <children> <RadioButton fx:id="rbMan" disable="true" mnemonicParsing="false" text="man"> <toggleGroup> <ToggleGroup fx:id="grpGeslacht" /> </toggleGroup> </RadioButton> <RadioButton fx:id="rbVrouw" disable="true" mnemonicParsing="false" text="vrouw" toggleGroup="$grpGeslacht" /> </children> </VBox> <CheckBox disable="true" mnemonicParsing="false" text="Uitgeschreven" GridPane.rowIndex="4" GridPane.valignment="TOP" /> <TextArea fx:id="taTekstruimte" disable="true" prefHeight="200.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="5" GridPane.rowSpan="2" /> </children> <columnConstraints> <ColumnConstraints maxWidth="131.0" minWidth="122.0" prefWidth="122.0" /> <ColumnConstraints /> </columnConstraints> <rowConstraints> <RowConstraints minHeight="10.0" prefHeight="30.0" /> <RowConstraints /> <RowConstraints /> <RowConstraints /> <RowConstraints /> <RowConstraints /> <RowConstraints /> </rowConstraints> <padding> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </padding> </GridPane> </children> <padding> <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> </padding> </FlowPane> </center> <bottom> <FlowPane alignment="CENTER" columnHalignment="CENTER" hgap="20.0" prefHeight="50.0" prefWidth="200.0" BorderPane.alignment="CENTER"> <children> <Button fx:id="btAnnuleren" disable="true" mnemonicParsing="false" onAction="#lidAnnuleren" text="Annuleren" /> <Button fx:id="btOpslaan" disable="true" mnemonicParsing="false" onAction="#lidOpslaan" text="Opslaan" /> </children> </FlowPane> </bottom> <GridPane.margin> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </GridPane.margin> </BorderPane> </children> </GridPane> </center> <top> <FlowPane alignment="CENTER" columnHalignment="CENTER" orientation="VERTICAL" prefHeight="100.0" BorderPane.alignment="CENTER"> <children> <Label text="Ledenbeheer"> <font> <Font size="42.0" /> </font> </Label> <Label fx:id="laError" text="label voor errors" textFill="RED" visible="false" /> <Button mnemonicParsing="false" onAction="#terugStart" prefHeight="17.0" prefWidth="32.0" text="&lt;=" textAlignment="CENTER"> <font> <Font name="Arial Bold" size="9.0" /> </font> </Button> </children> </FlowPane> </top> </BorderPane> 

這是LedenBeheerController的代碼(用於LedenBeheerFXML)

 package ui.controller; import databag.Lid; import static datatype.Geslacht.M; import static datatype.Geslacht.V; import exception.ApplicationException; import exception.DBException; import java.net.URL; import java.time.LocalDate; import static java.time.LocalDate.now; import java.util.ArrayList; import java.util.ResourceBundle; import javafx.fxml.Initializable; import ui.VIVESbike; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.DatePicker; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.RadioButton; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import transactie.LidTrans; /** * FXML Controller class * * @author MV */ public class LedenBeheerController implements Initializable { // referentie naar VIVESbike (main) private VIVESbike parent; /** * Referentie naar parent (start) instellen * * @param p referentie naar de runnable class die alle oproepen naar de * schermen bestuurt */ public void setParent(VIVESbike p) { parent = p; } // Componenten van de UI @FXML private ListView<Lid> lvLedenoverzicht; @FXML private Label laError; @FXML private Button btAnnuleren; @FXML private Button btOpslaan; @FXML private Button btLidtoevoeg; @FXML private Button btLiduitschrijf; @FXML private Button btLidwijzig; @FXML private TextField tfRijksregisternummer; @FXML private TextField tfVoornaam; @FXML private TextField tfNaam; @FXML private TextField tfEmail; @FXML private TextField tfTelefoon; @FXML private DatePicker dpStartdatum; @FXML private CheckBox cbUitschrijf; @FXML private RadioButton rbMan; @FXML private RadioButton rbVrouw; @FXML private TextArea taTekstruimte; private String errorMelding; private Boolean volledig; // Na iedere foutmelding de errorlabel clearen, valt praktisch in de code. private void resetError() { laError.setText(""); laError.setVisible(false); } // Controleert of bij een open formulier alle verplichte velden ingevuld zijn. private Boolean checkFormulier() { volledig = false; errorMelding = ""; // lusje om ieder element in de HEbox te controleren //indien alles gecontroleerd en ingevuld // volledig = true if ("".equals(tfRijksregisternummer.getText())) { errorMelding += "Rijksregisternr niet ingevuld "; } if ("".equals(tfVoornaam.getText())) { errorMelding += "Voornaam niet ingevuld "; } if ("".equals(tfNaam.getText())) { errorMelding += "Naam niet ingevuld "; } if ("".equals(tfEmail.getText())) { errorMelding += "Email niet ingevuld "; } if ("".equals(tfTelefoon.getText())) { errorMelding += "Telnr niet ingevuld "; } // lid moet ofwel man of vrouw zijn if (rbMan.isSelected() || rbVrouw.isSelected()) { errorMelding += "Geslacht niet geselecteerd "; } // Indien de errorlus leeg is betekent dit dat alle if'jes false zijn, dus alle verplichte velden zijn ingevuld! if ("".equals(errorMelding)) { volledig = true; } return volledig; } // Terugkeren naar het startscherm @FXML public void terugStart() { parent.showstartscherm(); } // Dit vult de listview lvLedenoverzicht met alle leden in het systeem. public void buildView() { resetError(); LidTrans lt = new LidTrans(); try { ArrayList<Lid> leden = lt.zoekAlleLeden(); for (Lid l : leden) { lvLedenoverzicht.getItems().add(l); } } catch (ApplicationException | DBException e) { laError.setVisible(true); laError.setText(e.getMessage()); } } // Functionaliteit knop Lid Toevoegen @FXML private void lidToevoegen() { // Correcte knoppen beschikbaar maken resetError(); btAnnuleren.setDisable(false); btOpslaan.setDisable(false); btLidtoevoeg.setDisable(true); btLiduitschrijf.setDisable(true); btLidwijzig.setDisable(true); // Alle formuliervelden leegmaken tfRijksregisternummer.setText(""); tfVoornaam.setText(""); tfNaam.setText(""); tfEmail.setText(""); tfTelefoon.setText(""); rbMan.setSelected(false); rbVrouw.setSelected(false); taTekstruimte.setText(""); // Formulier bruikbaar maken tfRijksregisternummer.setDisable(false); tfVoornaam.setDisable(false); tfNaam.setDisable(false); tfEmail.setDisable(false); tfTelefoon.setDisable(false); rbMan.setDisable(false); rbVrouw.setDisable(false); taTekstruimte.setDisable(false); // Deze twee velden zijn uitgeschakeld bij het inschrijven van een nieuw lid. (Logisch) dpStartdatum.setDisable(true); cbUitschrijf.setDisable(true); } // Functionaliteit knop Lid uitschrijven @FXML private void lidUitschrijven() { resetError(); Lid selectedLid = new Lid(); LidTrans ltu = new LidTrans(); int selectedIndex = lvLedenoverzicht.getSelectionModel().getSelectedIndex(); selectedLid = lvLedenoverzicht.getSelectionModel().getSelectedItem(); // Controleert of er een lid geselecteerd is in de listview if (selectedIndex == -1) { laError.setVisible(true); laError.setText("FOUT: Er werd geen lid geselecteerd om uit te schrijven!"); } else { resetError(); try { // Hier wordt het lid effectief uitgeschreven. (Concreet project-vlak: Rnr wordt in datatransactie een einddatum toegewijzigd | Concreet UI-vlak: Checkbox uitschreven CHECKED ltu.uitschrijvenLid(selectedLid.getRijksregisternummer()); } catch (DBException|ApplicationException ex) { laError.setVisible(true); laError.setText(ex.getMessage()); } } } // Functionaliteit knop Lid wijzigen @FXML private void lidWijzigen() throws DBException, ApplicationException { resetError(); Lid lidx = new Lid(); LidTrans ltw = new LidTrans(); int selectedIndex = lvLedenoverzicht.getSelectionModel().getSelectedIndex(); lidx = lvLedenoverzicht.getSelectionModel().getSelectedItem(); // Controleert of er een lid geselecteerd is in de listview if (selectedIndex == -1) { laError.setVisible(true); laError.setText("FOUT: Er werd geen lid geselecteerd om te wijzigen!"); } else { // Buttons aanpassen aan de situatie resetError(); btAnnuleren.setDisable(false); btOpslaan.setDisable(false); btLidtoevoeg.setDisable(true); btLiduitschrijf.setDisable(true); btLidwijzig.setDisable(true); // Formulier bruikbaar maken, met uitzondering van Rnr want deze mag nooit gewijzigd worden! tfRijksregisternummer.setDisable(true); tfVoornaam.setDisable(false); tfNaam.setDisable(false); tfEmail.setDisable(false); tfTelefoon.setDisable(false); dpStartdatum.setDisable(false); rbMan.setDisable(false); rbVrouw.setDisable(false); taTekstruimte.setDisable(false); // Uitgeschreven is steeds uitgeschakeld, lid uitschakelen is enkel mogelijk via de knop 'Lid uitschrijven'. cbUitschrijf.setDisable(true); } } // Functionaliteit knop Lid Annuleren @FXML private void lidAnnuleren() { // Proces lid toevoegen ANNULEREN // Buttons aanpassen aan de situatie resetError(); btAnnuleren.setDisable(true); btOpslaan.setDisable(true); btLidtoevoeg.setDisable(false); btLiduitschrijf.setDisable(false); btLidwijzig.setDisable(false); // Formulier disable tfRijksregisternummer.setDisable(true); tfVoornaam.setDisable(true); tfNaam.setDisable(true); tfEmail.setDisable(true); tfTelefoon.setDisable(true); dpStartdatum.setDisable(true); cbUitschrijf.setDisable(true); rbMan.setDisable(true); rbVrouw.setDisable(true); taTekstruimte.setDisable(true); } // Functionaliteit knop Lid Opslaan @FXML private void lidOpslaan() throws DBException { resetError(); // Checken of het formulier volledig is ingevuld (Ongeacht Lid toevoegen | Lid wijzigen) if (checkFormulier()) { resetError(); // HIER ZAL HET FORMULIER ALS NIEUW LID IN DE DATABASE TOEGEVOEGD WORDEN Lid lidx = new Lid(); LidTrans lto = new LidTrans(); //lidx.setRijksregisternummer(tfRijksregisternummer.getValue()); lidx.setVoornaam(tfVoornaam.getText()); lidx.setNaam(tfNaam.getText()); lidx.setTelnr(tfTelefoon.getText()); lidx.setEmailadres(tfEmail.getText()); lidx.setStart_lidmaatschap(dpStartdatum.getValue()); // Met "checkbox uitgeschreven" hoeft geen rekening gehouden te worden, deze heeft enkel een value (checked) als het lid is uitgeschreven! // If-Else lusje om de radiobutton keuze in te geven. if (rbMan.isSelected()) { lidx.setGeslacht(M); } else { lidx.setGeslacht(V); } lidx.setOpmerkingen(taTekstruimte.getText()); try { // IF disable dan is dit een formulier van Lid wijzigen if (tfRijksregisternummer.isDisable()) { lto.wijzigenLid(lidx); // ELSE is dit een formulier van Lid toevoegen } else { lto.toevoegenLid(lidx); } } catch (DBException | ApplicationException ex) { laError.setText(ex.getMessage()); laError.setVisible(true); } } // Indien niet-volledig corresponderende error weergeven else { laError.setText("FOUT: " + errorMelding); laError.setVisible(true); } } @Override public void initialize(URL location, ResourceBundle resources) { // LISTENER voor de listview lvLedenoverzicht.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { ObservableList<Lid> item = lvLedenoverzicht.getSelectionModel().getSelectedItems(); tfRijksregisternummer.setText(item.get(0).toString()); tfVoornaam.setText(item.get(0).toString()); tfNaam.setText(item.get(0).toString()); } }); } } 

我現在把手放在頭發上,任何幫助將不勝感激!

問題已經解決了! 我將Tableview定義為Listview ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM