Jestino Sam
Jestino Sam

Reputation: 602

JavaFX : Unable to populate the integer value in Table column

Basically I am trying to populate a table with some fields in JavaFX. I am able to populate the fields that have String data type but unable to populate field with integer data type.Can any one throw some light as to why the integer field is not getting populated? Below is my code for the files that i have created. What changes should be made to below code?

FXML file:

<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="619.0" prefWidth="676.0" xmlns="http://javafx.com/javafx/8.0.91" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.FXMLController">
   <children>
      <Label layoutX="86.0" layoutY="60.0" text="Project Name">
         <font>
            <Font name="Segoe UI Semibold" size="13.0" />
         </font>
      </Label>
      <TextField fx:id="projectName" layoutX="181.0" layoutY="57.0" prefHeight="25.0" prefWidth="396.0" promptText="Enter your Project Name">
         <tooltip>
            <Tooltip text="Enter your Project name" />
         </tooltip>
      </TextField>
      <Label layoutX="86.0" layoutY="97.0" text="Environment">
         <font>
            <Font name="Segoe UI Semibold" size="13.0" />
         </font>
      </Label>
      <TextField fx:id="environment" layoutX="181.0" layoutY="94.0" prefHeight="25.0" prefWidth="396.0" promptText="Enter your Environment Name" />
      <Label layoutX="86.0" layoutY="138.0" text="Server URL">
         <font>
            <Font name="Segoe UI Semibold" size="13.0" />
         </font>
      </Label>
      <TextField fx:id="serverURL" layoutX="181.0" layoutY="135.0" prefHeight="25.0" prefWidth="396.0" promptText="Enter your URL details" />
      <Button fx:id="addDetails" layoutX="175.0" layoutY="188.0" mnemonicParsing="false" onAction="#addDetails" prefHeight="25.0" prefWidth="75.0" text="Add">
         <font>
            <Font name="Segoe UI Semibold" size="12.0" />
         </font>
      </Button>
      <Button fx:id="updateDetails" layoutX="311.0" layoutY="188.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="75.0" text="Update">
         <font>
            <Font name="Segoe UI Semibold" size="12.0" />
         </font>
      </Button>
      <Button fx:id="deleteDetails" layoutX="460.0" layoutY="188.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="75.0" text="Delete">
         <font>
            <Font name="Segoe UI Semibold" size="12.0" />
         </font>
      </Button>
      <TableView fx:id="tblDetails" editable="true" layoutX="85.0" layoutY="247.0" prefHeight="200.0" prefWidth="519.0">
        <columns>
          <TableColumn fx:id="colSerial" prefWidth="40.0" text="Sr.No.">
          <cellValueFactory>
                <PropertyValueFactory property="serialNo" />
             </cellValueFactory>
           </TableColumn>
          <TableColumn fx:id="colProjectName" prefWidth="106.0" text="Project Name">
            <cellValueFactory>
                <PropertyValueFactory property="projectName" />
             </cellValueFactory>
           </TableColumn>
           <TableColumn fx:id="colEnvironment" prefWidth="78.0" text="Environment">
            <cellValueFactory>
                <PropertyValueFactory property="environment" />
             </cellValueFactory>
            </TableColumn> 
            <TableColumn fx:id="colServerURL" minWidth="0.0" prefWidth="203.0" text="Server URL">
            <cellValueFactory>
                <PropertyValueFactory property="serverURL" />
             </cellValueFactory>
             </TableColumn>
            <TableColumn fx:id="colDefault" prefWidth="91.0" text="Default">
            <cellValueFactory>
                <PropertyValueFactory property="defaultValue" />
             </cellValueFactory>
             </TableColumn>
        </columns>
         <columnResizePolicy>
            <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
         </columnResizePolicy>
      </TableView>
      <CheckBox fx:id="defaultIndicator" layoutX="591.0" layoutY="61.0" mnemonicParsing="false" prefHeight="19.0" prefWidth="75.0" text="Default">
         <font>
            <Font name="Segoe UI Semibold" size="13.0" />
         </font>
         <tooltip>
            <Tooltip contentDisplay="RIGHT" text="Check this box to make the current server as default one." />
         </tooltip>
      </CheckBox>
      <RadioButton fx:id="dbUpdateInd" layoutX="83.0" layoutY="466.0" mnemonicParsing="false" text="Select this option to update DB details for Dashboard Report Generator">
         <font>
            <Font name="Segoe UI Semibold" size="13.0" />
         </font>
      </RadioButton>
      <Pane fx:id="dbDetailsPane" layoutX="86.0" layoutY="485.0" prefHeight="89.0" prefWidth="519.0">
         <children>
            <Label layoutY="13.0" text="DB Server URL">
               <font>
                  <Font name="Segoe UI Semibold" size="13.0" />
               </font>
            </Label>
            <TextField fx:id="dbServerURL" layoutX="97.0" layoutY="9.0" prefHeight="25.0" prefWidth="389.0" promptText="Enter your DB Server URL">
               <tooltip>
                  <Tooltip text="Enter your Project name" />
               </tooltip>
            </TextField>
            <Label layoutY="45.0" text="DB UserName">
               <font>
                  <Font name="Segoe UI Semibold" size="13.0" />
               </font>
            </Label>
            <TextField fx:id="dbUsername" layoutX="97.0" layoutY="42.0" prefHeight="25.0" prefWidth="143.0" promptText="DB Server UserName">
               <tooltip>
                  <Tooltip text="Enter your Project name" />
               </tooltip>
            </TextField>
            <Label layoutX="253.0" layoutY="45.0" text="DB Password">
               <font>
                  <Font name="Segoe UI Semibold" size="13.0" />
               </font>
            </Label>
         </children>
      </Pane>
      <PasswordField fx:id="dbPassword" layoutX="428.0" layoutY="528.0" prefHeight="25.0" prefWidth="143.0" promptText="DB Server Password" />
   </children>
   <cursor>
      <Cursor fx:constant="DEFAULT" />
   </cursor>
</Pane>

Controller File:FXMLController

package application;


import javafx.beans.property.SimpleIntegerProperty;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class FXMLController extends TableCell<DataSource, Integer> {
    @FXML private TableView<DataSource> tblDetails;
    @FXML private TableColumn<DataSource, Number> colSerial = new TableColumn<DataSource, Number>("serialNo");
    //@FXML private TextField serialNo;
    @FXML private TextField projectName;
    @FXML private TextField environment;
    @FXML private TextField serverURL;
    @FXML private CheckBox defaultIndicator;

    //Integer serial = 0;

    static int serial = 0;
    @FXML
    protected void addDetails(ActionEvent event){
        ObservableList<DataSource> data = tblDetails.getItems();
        CellDataFeatures cellData;
        DataSource ds = new DataSource();
        serial++;
        //ds.setSerial(serial);;
        System.out.println(ds.getSerial());
        //int ser = ds.setSerial(serial++);
        data.add(new DataSource(ds.getSerial(),projectName.getText(),environment.getText(),serverURL.getText(),defaultIndicator.getText()));

        projectName.setText("");
        environment.setText("");
        serverURL.setText("");
        defaultIndicator.setText("");
    }

}

Data file (Beans file) DataSource

package application;

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;

public class DataSource {
    private int serial = 0;
    private final SimpleIntegerProperty serialNo = new SimpleIntegerProperty();
    //private final SimpleStringProperty serialNo = new SimpleStringProperty("");
    private final SimpleStringProperty projectName = new SimpleStringProperty("");
    private final SimpleStringProperty environment = new SimpleStringProperty("");
    private final SimpleStringProperty serverURL = new SimpleStringProperty("");
    private final SimpleStringProperty defaultValue = new SimpleStringProperty("");

    public DataSource(){
        this(1,"","","","");
    }

    public DataSource(Integer serial, String projectName,String envName, String serverURL, String defaultValue){
        serial = 0; serial++;
        setSerial(serial);
        setEnvironment(envName);
        setProjectName(projectName);
        setServerURL(serverURL);
        setDefaultValue(defaultValue);
    }

    public int getSerial(){
        return serialNo.get();
    }

    public void setSerial(int serialNum){
        serialNo.set(serialNum);
    }

    public String getProjectName(){
        return projectName.get();
    }

    public void setProjectName(String prjName){
        projectName.set(prjName);
    }

    public String getEnvironment(){
        return environment.get();
    }

    public void setEnvironment(String envName){
        environment.set(envName);
    }

    public String getServerURL(){
        return serverURL.get();
    }

    public void setServerURL(String serverUrl){
        serverURL.set(serverUrl);
    }

    public String getDefaultValue(){
        return defaultValue.get();
    }

    public void setDefaultValue(String defaultInd){
        defaultValue.set(defaultInd);
    }
}

Upvotes: 0

Views: 1115

Answers (1)

Jestino Sam
Jestino Sam

Reputation: 602

Finally got the solution! Actually my getter & setter method for serial number were not matching with the name that i declared in the DataSource.java file. Just changed the following in the DataSource.java file as following:

public int getSerialNo(){
        return serialNo.get();
    }

    public void setSerialNo(int serialNum){
        serialNo.set(serialNum);
    }

Changed from serial to SerialNo for both getter & setter method. Finally it worked !!!

Upvotes: 1

Related Questions