Javafx - 为日期和赋值组合两个ArrayLists的元素

时间:2017-05-31 15:22:24

标签: arrays javafx datepicker

我有一个javafx日历应用程序,它显示日期选择器外观中ArrayList的日期。约会及其日期位于SQL数据库中。

我已经使用ArrayList在日期选择器皮肤中重试日期并显示它们 - 稍微帮助一下。

现在我希望约会名称在日期选择器皮肤中的各自日期显示为工具提示。为此,我将字符串复制到一个单独的列表中。

 ArrayList dates (2017-05-05 , 2017-05-15 , 2017-05-25);
 ArrayList tooltips ( Peter , Paul , Mary);

我的问题是我无法让两个列表与项目匹配,因此每个日期字段仅代表匹配的工具提示。相反,每个字段显示所有工具提示。我试过for-loops和pair,但都没有成功。值得一提的是,我是一名具有几个月经验的Java初学者。

这是我到目前为止所做的:

  ObservableList<LocalDate> dates = FXCollections.observableArrayList();

  while (rs.next()) {

      String  dateFromDatabase = rs.getString("DATE");
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
      LocalDate localDate = LocalDate.parse(dateFromDatabase , formatter);
      dates.add(localDate);

  }

  ObservableList<String> tooltipList = FXCollections.observableArrayList();
      tooltipList.add("Peter");
      tooltipList.add("Paul"); 
      tooltipList.add("Mary"); 


  Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() {

         public DateCell call (final DatePicker datePicker ) {

             return new DateCell() {

                 @Override
                 public void updateItem (LocalDate item , boolean empty) {
                     super.updateItem(item, empty);

                     if (item != null && dates.contains(item)) {

                         this.setStyle("-fx-background-color: lightblue; -fx-text-fill: black ;");
                         this.setStyle("-fx-background-color: gold");

                    for(int i =0; i< dates.size(); i++) {
                        Tooltip tooltip = new Tooltip(tooltipList.toString());
                        this.setTooltip(tooltip);


                     } 

                  };

             };

        };

    };

enter image description here

1 个答案:

答案 0 :(得分:1)

此应用程序可能与您正在寻找的内容非常相似,但我建议您听一下Jame_D的警告,并尝试找到一种不同的方法来实现您的日历。我还没有检查过,但我会从ControlFx开始,或者实现自己的。

/*
 * 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 javafxapplication46;

import java.time.*;
import java.util.*;
import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;
import javafx.util.*;

public class JavaFXApplication46 extends Application {

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

    @Override
    public void start(Stage stage)
    {
        Map<String, String> map = new HashMap();
        map.put("2017-05-28", "Peter");
        map.put("2017-05-30", "Paul");
        map.put("2017-05-31", "Mary");
        VBox vbox = new VBox(20);
        Scene scene = new Scene(vbox, 400, 400);
        stage.setScene(scene);

        DatePicker endDatePicker = new DatePicker();

        final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() {
            @Override
            public DateCell call(final DatePicker datePicker)
            {
                return new DateCell() {
                    @Override
                    public void updateItem(LocalDate item, boolean empty)
                    {
                        super.updateItem(item, empty);

                        for (Map.Entry<String, String> entry : map.entrySet()) {

                            if (item.toString().equals(entry.getKey())) {
                                setTooltip(new Tooltip(map.get(item.toString())));
                            }
                            //System.out.println(entry.getKey() + "/" + entry.getValue());
                            //
                        }

                    }
                };
            }
        };
        endDatePicker.setDayCellFactory(dayCellFactory);
        endDatePicker.setValue(LocalDate.now());
        vbox.getChildren().add(new Label("End Date:"));
        vbox.getChildren().add(endDatePicker);
        stage.show();
    }
}