将整数转换为double - 在tableview中

时间:2015-11-15 14:34:26

标签: java javafx

我创建了一个程序,其中包含一个计算秒数(seconden)的列。现在我想将类型转换为double而不是整数,因为它得到了错误的答案(例如(25-2000 / 160)* 60应该在我的倒数计时器中给我750而不是780秒。我怎样才能转换它?

Class RuniteOre:

import java.util.regex.Pattern;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.beans.property.IntegerProperty;
import javafx.collections.ListChangeListener.Change;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.util.Duration;

public class RuniteOre extends Application {

    Stage window;
    TableView<Product> table;
    TextField rockInput, worldInput, aantalSpelers;
    int seconden;

    public static void main(String[] args) {
        launch(args);

    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        table = new TableView<>();
        window = primaryStage;
        window.setTitle("Runite Ore - Calculator");

        //Rock column
        TableColumn<Product, String> rockColumn = new TableColumn<>("Rock");
        rockColumn.setMinWidth(100);
        rockColumn.setCellValueFactory(new PropertyValueFactory<>("rock"));

        //World column
        TableColumn<Product, Integer> worldColumn = new TableColumn<>("World");
        worldColumn.setMinWidth(100);
        worldColumn.setCellValueFactory(new PropertyValueFactory<>("world"));

        //Aantal spelers column
        TableColumn<Product, Integer> aantalSpelersColumn = new TableColumn<>("Aantal Spelers");
        aantalSpelersColumn.setMinWidth(100);
        aantalSpelersColumn.setCellValueFactory(new PropertyValueFactory<>("aantalSpelers"));


        TableColumn<Product, Integer> secondenColumn = new TableColumn<>("Seconden");
        secondenColumn.setCellValueFactory(cellData -> cellData.getValue().secondsProperty().asObject());

        table.getItems().addListener((Change<? extends Product> c) -> {
            while (c.next()) {
                if (c.wasAdded()) {
                    for (Product item : c.getAddedSubList()) {
                        int startValue = item.getSeconden() ;
                        Timeline countdown = new Timeline(new KeyFrame(Duration.seconds(1), e -> 
                            item.setSeconden(item.getSeconden() - 1)
                        ));
                        countdown.setCycleCount(startValue);
                        countdown.play();
                    }
                }
            }
        }); 




        //Rock input
        rockInput = new TextField();
        rockInput.setPromptText("Rocks");
        rockInput.setMinWidth(100);

        //World input
        worldInput= new TextField();
        worldInput.setPromptText("World");

        //Aantal spelers input
        aantalSpelers = new TextField();
        aantalSpelers.setPromptText("Aantal Spelers");

        //Button
        Button addButton = new Button("Add");
        addButton.setOnAction(e -> addButtonClicked());
        Button deleteButton = new Button("Delete");
        deleteButton.setOnAction(e -> deleteButtonClicked());

        HBox hBox = new HBox();
        hBox.setPadding(new Insets(10,10,10,10));
        hBox.setSpacing(10);
        hBox.getChildren().addAll(rockInput, worldInput, aantalSpelers, addButton, deleteButton);


        table.getColumns().addAll(rockColumn, worldColumn, aantalSpelersColumn,secondenColumn);

        VBox vBox = new VBox();
        vBox.getChildren().addAll(table, hBox);

        Scene scene = new Scene(vBox);
        window.setScene(scene);
        window.show();


    }

    //Add button clicked
    public void addButtonClicked(){
        Product product = new Product();
        product.setRock(rockInput.getText());
        product.setWorld(Integer.parseInt(worldInput.getText()));
        product.setAantalSpelers(Integer.parseInt(aantalSpelers.getText()));
        seconden=(25-((Integer.parseInt(aantalSpelers.getText()))/160))*60;
        //seconden=(Integer.parseInt(aantalSpelers.getText()));
       product.setSeconden(seconden);

        table.getItems().add(product);

        rockInput.clear();
        worldInput.clear();
        aantalSpelers.clear();
    }

    //Delete button clicked
    public void deleteButtonClicked(){
        ObservableList<Product> productSelected, allProducts;
        allProducts = table.getItems();
        productSelected = table.getSelectionModel().getSelectedItems();

        productSelected.forEach(allProducts::remove);
    }




}

类产品:

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
public class Product {

    private String rock;
    private int world;
    private int aantalSpelers;
    //private int seconden;
    private int timer;

    private final IntegerProperty seconden = new SimpleIntegerProperty() ;

    public Product(){
        this.rock = "";
        this.world = 0;
        this.aantalSpelers = 0;
    }

    public Product(String rock, int world, int aantalSpelers){
        this.rock = rock;
        this.world = world;
        this.aantalSpelers = aantalSpelers;
    }

    public String getRock() {
        return rock;
    }

    public void setRock(String rock) {
        this.rock = rock;
    }

    public int getWorld() {
        return world;
    }

    public void setWorld(int world) {
        this.world = world;
    }

    public int getAantalSpelers() {
        return aantalSpelers;
    }

    public void setAantalSpelers(int aantalSpelers) {
        this.aantalSpelers = aantalSpelers;
    }

    public final int getSeconden() {
        return secondsProperty().get();
    }

    public final void setSeconden(int seconden) {
        secondsProperty().set(seconden);
    }

   // public int getTimer() {
    //    return timer;
    //}

    //public void setTimer(int timer) {
    //    this.timer = timer;
   // }



   public Product(int seconden) {
            setSeconden(seconden);
   }

   public IntegerProperty secondsProperty() {
            return seconden ;
   }

}

2 个答案:

答案 0 :(得分:0)

我可能会遗漏一些东西。为什么不直接将类型更改为双倍?

 double seconden=(25-((Double.parseDouble(aantalSpelers.getText()))/160))*60;

更新:如果你不想将你的seconden属性改为double,那么你需要施放

int seconden= (int)((25-((Double.parseDouble(aantalSpelers.getText()))/160))*60);

这里的关键是你在分割期间保持数据加倍(aantalSpelers.getText()))/ 160),否则会截断你的结果。之后你可以安全地回到整数

答案 1 :(得分:0)

试试这个

double seconden=(25-((Double.parseDouble(aantalSpelers.getText()))/160))*(double)60;

同时

更改setSeconden(int seconden){...}方法的参数,以便接受双数据类型setSeconden(double seconden){...}

下,

`public final int getSeconden() {....}` to `public final double getSeconden() {...}`

public IntegerProperty secondsProperty(){.....}public DoubleProperty secondsProperty(){...}