gpt4 book ai didi

java - NetBeans - Java FXML - View 不想打开

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:05 25 4
gpt4 key购买 nike

我有以下情况:(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...

关于java - NetBeans - Java FXML - View 不想打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com