2

Hibernate と JavaFx を使用しています。私がやろうとしているのは、1 つの要素 (行) を変更し、変更後にそれを更新することです。

すべての要素を更新したくありません(チュートリアルで見つけたように)。SimpleStringProperty は JPA マッピング ファイルで使用できないため、使用できません。

同じ要素を削除して追加しようとしました - 要素は削除されましたが、再度追加されませんでした。

助けてください。

4

2 に答える 2

0

I ran into the same problem when I started using TableView tied to a database table. I'd update the data for an object, which is displayed in one row of the table, and since the data structure is an ObservableList I would expect the data to refresh automatically. Doesn't happen, and there is an open (last I checked) JIRA issue for this. In the meantime you can do this:

              tableView.getColumns().get(0).setVisible(false);
              tableView.getColumns().get(0).setVisible(true);

This forces the refresh, and it happens very quickly. Doesn't matter what index you use in the get() method, so I always use zero (0). Previously I was resetting the entire List of data and clearing the tableView and resetting the data, and that caused a noticeable flash/redraw. The setVisible method above didn't cause that to happen and was exactly what I was hoping for. Good Luck.

于 2013-04-04T13:32:08.343 に答える
-1
import javafx.application.Application;

import javafx.scene.Group;

import javafx.scene.Scene;

import javafx.stage.Stage;

import java.util.Date;

import javafx.collections.FXCollections;

import javafx.collections.ObservableList;

import javafx.concurrent.Service;

import javafx.concurrent.Task;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

import javafx.geometry.Insets;

import javafx.scene.control.Button;

import javafx.scene.control.ProgressIndicator;

import javafx.scene.control.TableColumn;

import javafx.scene.control.TableView;

import javafx.scene.control.cell.PropertyValueFactory;

import javafx.scene.layout.Region;

import javafx.scene.layout.StackPane;

import javafx.scene.layout.VBox;

public class ServiceSample extends Application {



    final GetDailySalesService service = new GetDailySalesService();



    private void init(Stage primaryStage) {

        Group root = new Group();

        primaryStage.setScene(new Scene(root));



        VBox vbox = new VBox(5);

        vbox.setPadding(new Insets(12));

        TableView tableView = new TableView();

        Button button = new Button("Refresh");

        button.setOnAction(new EventHandler<ActionEvent>() {



            public void handle(ActionEvent t) {

                service.restart();

            }

        });

        vbox.getChildren().addAll(tableView, button);



        Region veil = new Region();

        veil.setStyle("-fx-background-color: rgba(0, 0, 0, 0.4)");

        ProgressIndicator p = new ProgressIndicator();

        p.setMaxSize(150, 150);



        //Define table columns

        TableColumn idCol = new TableColumn();

        idCol.setText("ID");

        idCol.setCellValueFactory(new PropertyValueFactory("dailySalesId"));

        tableView.getColumns().add(idCol);

        TableColumn qtyCol = new TableColumn();

        qtyCol.setText("Qty");

        qtyCol.setCellValueFactory(new PropertyValueFactory("quantity"));

        tableView.getColumns().add(qtyCol);

        TableColumn dateCol = new TableColumn();

        dateCol.setText("Date");

        dateCol.setCellValueFactory(new PropertyValueFactory("date"));

        dateCol.setMinWidth(240);

        tableView.getColumns().add(dateCol);





        p.progressProperty().bind(service.progressProperty());

        veil.visibleProperty().bind(service.runningProperty());

        p.visibleProperty().bind(service.runningProperty());

        tableView.itemsProperty().bind(service.valueProperty());



        StackPane stack = new StackPane();

        stack.getChildren().addAll(vbox, veil, p);



        root.getChildren().add(stack);

        service.start();

    }




    public class GetDailySalesService extends Service<ObservableList<DailySales>> {



        @Override

        protected Task createTask() {

            return new GetDailySalesTask();

        }

    }



    public class GetDailySalesTask extends Task<ObservableList<DailySales>> {       

        @Override protected ObservableList<DailySales> call() throws Exception {

            for (int i = 0; i < 500; i++) {

                updateProgress(i, 500);

                Thread.sleep(5);

            }

            ObservableList<DailySales> sales = FXCollections.observableArrayList();

            sales.add(new DailySales(1, 5000, new Date()));

            sales.add(new DailySales(2, 2473, new Date(0)));

            return sales;

        }

    }



    public class DailySales {



        private Integer dailySalesId;

        private Integer quantity;

        private Date date;



        public DailySales() {

        }



        public DailySales(int id, int qty, Date date) {

            this.dailySalesId = id;

            this.quantity = qty;

            this.date = date;

        }



        public Integer getDailySalesId() {

            return dailySalesId;

        }



        public void setDailySalesId(Integer dailySalesId) {

            this.dailySalesId = dailySalesId;

        }



        public Integer getQuantity() {

            return quantity;

        }



        public void setQuantity(Integer quantity) {

            this.quantity = quantity;

        }



        public Date getDate() {

            return date;

        }



        public void setDate(Date date) {

            this.date = date;

        }

    }



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

        init(primaryStage);

        primaryStage.show();

    }

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

}
于 2013-03-19T18:34:12.010 に答える