2016-09-24 33 views
0

基本上我试图用JavaFX中的一些字段填充表。我能够填充具有字符串数据类型的字段,但无法使用整数数据类型填充字段。任何人都可以抛出一些关于为什么整数字段未被填充的信息?以下是我创建的文件的代码。 下面的代码应该做什么修改?JavaFX:无法填充表列中的整数值

FXML文件:

<?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> 

控制器的文件: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(""); 
    } 

} 

数据文件(豆文件)的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); 
    } 
} 
+0

没有代码'setItems(data);',也可以看一下Oracle官方教程(https://docs.oracle.com/javafx/2/ui_controls/table-view.htm),并且在这里问题(https://stackoverflow.com/questions/16360323/javafx-table-how-to-add-components) – GOXR3PLUS

回答

1

终于有了解决办法!实际上,我的getter &序列号的setter方法与我在DataSource.java文件中声明的名称不匹配。 只是改变在DataSource.java文件中的以下如下:

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

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

从串行更改为的SerialNo两个吸气& setter方法。 最后它的工作!

+0

您可以接受您自己的解决方案,将其标记为“解决问题”。下次我会推荐一个[MCVE] – c0der

+0

@ c0der没有理由抱怨没有在这里发布必要的信息。问题中发布的信息足以确定问题的根源。自我接受只能在一些延迟(一天或两天(?))后才能完成。 – fabian

+0

@fabian感谢您的反馈。我没有抱怨,但建议。我同意“问题中发布的信息就足够了”。事实上,我认为发布的信息太多了。这就是我推荐Mcve的原因。 – c0der