NetBeans - Java FXML - View不想打开

时间:2018-03-30 20:47:18

标签: java javafx netbeans fxml

我有以下情况: (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>
&#13;
&#13;
&#13;

这是LedenBeheerController的代码(适用于LedenBeheerFXML)

&#13;
&#13;
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());
          }
      });
    }

}
&#13;
&#13;
&#13;

我现在手上的头发,任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

问题解决了!我将Tableview定义为Listview ...