2017-10-14 72 views
0

我試圖做一個程序,它從文本字段獲取數據,將其添加到tableview和比數據庫。問題是,我需要tableview來接受空的textfield值。即使文本框爲空,如何向tableView添加數據?

這是我如何添加值的實現代碼如下:

public void pievButtonClicked() { 
    int kods = Integer.parseInt(kodsT.getText()); 
    String nosaukums = nosaukumsT.getText(); 
    int inventars = Integer.parseInt(iegadesT.getText()); 
    double uzskaite = Double.parseDouble(uzskaitesT.getText()); 
    double iegade = Double.parseDouble(iegadesT.getText()); 
    data.addAll(new Interjers(kods, nosaukums, inventars, uzskaite, iegade)); 
} 

也許我需要改變「Interijers」類或我需要改變setCellValueFactory一些方法。我真的不知道。

+0

什麼是您的堆棧跟蹤? –

回答

0

我不知道準確地想要什麼!但我做了這個例子對你來說,這似乎說明你需要

模型類:

package javafxapplication4; 


public class Model { 

    String name; 
    String age; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAge() { 
     return age; 
    } 

    public Model(String name, String age) { 
     this.name = name; 
     this.age = age; 
    } 

    public void setAge(String age) { 
     this.age = age; 
    } 

} 

FXML:

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.net.URL?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.TableColumn?> 
<?import javafx.scene.control.TableView?> 
<?import javafx.scene.control.TextField?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" styleClass="mainFxmlClass" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.111" fx:controller="javafxapplication4.HomeController"> 
    <stylesheets> 
     <URL value="@home.css" /> 
    </stylesheets> 
    <children> 
     <TextField fx:id="nameField" layoutY="30.0" /> 
     <TextField fx:id="ageField" layoutX="226.0" layoutY="30.0" /> 
     <Button layoutX="451.0" layoutY="30.0" mnemonicParsing="false" onAction="#addLine" text="Button" /> 
     <TableView fx:id="view" layoutX="52.0" layoutY="100.0" prefHeight="200.0" prefWidth="506.0"> 
     <columns> 
      <TableColumn fx:id="nameCo" prefWidth="75.0" text="Name" /> 
      <TableColumn fx:id="ageCo" prefWidth="75.0" text="Age" /> 
     </columns> 
     </TableView> 
    </children> 
</AnchorPane> 

控制器類:

package javafxapplication4; 

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.TextField; 
import javafx.scene.control.cell.PropertyValueFactory; 

/** 
* FXML Controller class 
* 
* @author Ala_Eddine 
*/ 
public class HomeController implements Initializable { 

    /** 
    * Initializes the controller class. 
    */ 
    @FXML 
    public TableView<Model> view; 

    @FXML 
    public TableColumn<Model, String> nameCo; 

    @FXML 
    public TableColumn<Model, String> ageCo; 

    @FXML 
    public TextField nameField; 

    @FXML 
    public TextField ageField; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
    nameCo.setCellValueFactory(new PropertyValueFactory<>("name")); 
    ageCo.setCellValueFactory(new PropertyValueFactory<>("age")); 
    } 

    @FXML 
    public void addLine() { 
     String name = nameField.getText(); 
     String age = ageField.getText(); 
     Model model = new Model(name, age); 
     view.getItems().add(model); 

    } 

} 

主類:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package javafxapplication4; 

import java.io.IOException; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

/** 
* 
* @author Ala_Eddine 
*/ 
public class JavaFXApplication4 extends Application { 

    @Override 
    public void start(Stage primaryStage) throws IOException { 

     Stage stage=new Stage(); 
     Parent root = FXMLLoader.load(getClass().getResource("Home.fxml")); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 

    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

結果 enter image description here

+0

問題是,我得到了'java.lang.NumberFormatException:對於輸入字符串:「」'我試圖離開'textfield'空的所有時間。我可以捕獲'NumberFormatException',如果它發生,只需將值設置爲null或某些東西,但我將需要將它添加到數據庫以後,所以我不認爲這樣的解決方案將工作。以下是我的代碼的鏈接:[main](https://pastebin.com/CdCrnGFT),[DataAccessor](https://pastebin.com/NwLeuNu0),[Product](https://pastebin.com/ WqAvEjma)。這裏是到程序UI的鏈接,看看我現在在哪裏:[image](https://imgur.com/a/6U4T3)。 –

+0

由於您試圖解析空值,因此您需要對空進行測試。 –