2015-02-13 25 views
6

Java için yeni ve javaFx kullanarak java uygulamaları geliştirmeye başladım. çok arama yaptım ama javaFx'te herhangi bir tarih ve zaman seçicisi bulamadı. Hatta JFxtras'ı denedim ama çalışmıyor. Bu arada javafx 2.2.3 ve java 7 kullanıyorum. Herhangi bir yardım çok takdir edilecektir.javaFx için herhangi bir Tarih ve Zaman seçicisi var mı?

+3

Java 8'e çıkma şansınız var mı? – Adam

+0

Hayır efendim. Sadece bunun üzerinde çalışmak zorundayım. – Manivannan

+1

[Christian Schudt tarafından oluşturulan tarih seçiciyi] kullanabilirsiniz (http://myjavafx.blogspot.ch/2012/01/javafx-calendar-control.html). Bir eğitim için, [Marco Jakob blogunu] takip edebilirsiniz (http://code.makery.ch/blog/javafx-2-date-picker/) – ItachiUchiha

cevap

2

JFXtras projesi, JavaFX 2.2 için bir çalışma sürümüne sahiptir. 2.2 şubesinin altındaki repo numaralı telefondan CalendarPicker, CalendarTimePicker, ... adresine bakın.

En son sürümü (2.2-r6-SNAPSHOT) jfxtras.org karşıdan yükleyerek deneyebilirsiniz.

Bu kısa pasajı tarih ve saati hem toplama için bir takvim oluşturur:

@Override 
public void start(Stage primaryStage) { 
    CalendarPicker dateTime = new CalendarPicker(); 
    dateTime.withCalendar(Calendar.getInstance()); 
    dateTime.withShowTime(Boolean.TRUE); 
    dateTime.withLocale(Locale.ENGLISH); 
    dateTime.calendarProperty().addListener(new ChangeListener<Calendar>() { 

     @Override 
     public void changed(ObservableValue<? extends Calendar> ov, Calendar t, Calendar t1) { 
      System.out.println("Selected date: "+t1.getTime().toString()); 
     } 
    }); 
    StackPane root = new StackPane(); 
    root.getChildren().add(dateTime); 

    Scene scene = new Scene(root, 300, 250); 
    primaryStage.setTitle("Date & Time from JFXtras 2.2"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

Date and Time

2

Ben en uygun kaydırıcılarıyla değiştirmek yerine klavye ile saati girin bulabilirsiniz.

DateTimePicker for JavaFX 8

Ben de DatePicker TextField onBlur düzenlenemez değeri taahhüt etmediğini o rahatsız edici buluyorum, bu yüzden aşağıdaki kod yanı giderir: Bu gibi görünmeye dahil DatePicker uzatmak oldukça kolay .

pasajı brevety için KOTLIN yazılır

, kolayca IntelliJ IDEA yoluyla Java dönüştürebilirsiniz:

import javafx.beans.property.SimpleObjectProperty 
import javafx.scene.control.DatePicker 
import javafx.scene.input.KeyCode 
import javafx.scene.input.KeyEvent 
import javafx.scene.input.MouseEvent 
import javafx.util.StringConverter 
import java.time.LocalDate 
import java.time.LocalDateTime 
import java.time.LocalTime 
import java.time.format.DateTimeFormatter 

class DateTimePicker(val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")) : DatePicker() { 
    private var dateTimeValue = SimpleObjectProperty<LocalDateTime>(LocalDateTime.now()) 

    init { 
     converter = object : StringConverter<LocalDate>() { 
      override fun toString(value: LocalDate?): String { 
       return if (dateTimeValue.get() != null) dateTimeValue.get().format(formatter) else "" 
      } 

      override fun fromString(value: String?): LocalDate? { 
       if (value == null) { 
        dateTimeValue.set(null) 
        return null 
       } 

       dateTimeValue.set(LocalDateTime.parse(value, formatter)) 
       return dateTimeValue.get().toLocalDate() 
      } 
     } 

     // Syncronize changes to the underlying date value back to the dateTimeValue 
     valueProperty().addListener { observable, old, new -> 
      if (new == null) { 
       dateTimeValue.set(null) 
      } else { 
       if (dateTimeValue.get() == null) { 
        dateTimeValue.set(LocalDateTime.of(new, LocalTime.now())) 
       } else { 
        val time = dateTimeValue.get().toLocalTime() 
        dateTimeValue.set(LocalDateTime.of(new, time)) 
       } 
      } 
     } 

     // Syncronize changes to dateTimeValue back to the underlying date value 
     dateTimeValue.addListener { observable, old, new -> 
      valueProperty().set(new?.toLocalDate()) 
     } 

     // Persist changes onblur 
     editor.focusedProperty().addListener { observable, old, new -> 
      if (!new) 
       simulateEnterPressed() 
     } 

    } 

    private fun simulateEnterPressed() = 
     editor.fireEvent(KeyEvent(editor, editor, KeyEvent.KEY_PRESSED, null, null, KeyCode.ENTER, false, false, false, false)) 

    fun dateTimeValueProperty() = dateTimeValue; 
} 

dateTimeValueProperty için LocalDateTime mülkiyet Bind.

+0

bunu java kodu olarak sağlayabilir misiniz? (Onun bir java sorusu ve intelliJ ücretsiz değil) – lumo

+1

Elbette, onu Java koduna dönüştürüp buraya gönderiyorum. Ancak IntelliJ Community Edition tamamen ücretsizdir. –

7

Yukarıdaki DateTimePicker denetiminin bir Java sürümü, biraz geliştirilmiş.

Bu kod artık TornadoFX Controls'un bir parçasıdır ve GitHub Repo'nun en son DateTimePicker.java sürümüne bakabilirsiniz. Kontrol bu koordinatlar altında yanı Maven Central mevcuttur: Şu anda

<dependency> 
    <groupId>no.tornado</groupId> 
    <artifactId>tornadofx-controls</artifactId> 
    <version>1.0.3</version> 
</dependency> 

uygulaması:

import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleObjectProperty; 
import javafx.scene.control.DatePicker; 
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent; 
import javafx.util.StringConverter; 

import java.time.LocalDate; 
import java.time.LocalDateTime; 
import java.time.LocalTime; 
import java.time.format.DateTimeFormatter; 

/** 
* A DateTimePicker with configurable datetime format where both date and time can be changed 
* via the text field and the date can additionally be changed via the JavaFX default date picker. 
*/ 
@SuppressWarnings("unused") 
public class DateTimePicker extends DatePicker { 
    public static final String DefaultFormat = "yyyy-MM-dd HH:mm"; 

    private DateTimeFormatter formatter; 
    private ObjectProperty<LocalDateTime> dateTimeValue = new SimpleObjectProperty<>(LocalDateTime.now()); 
    private ObjectProperty<String> format = new SimpleObjectProperty<String>() { 
     public void set(String newValue) { 
      super.set(newValue); 
      formatter = DateTimeFormatter.ofPattern(newValue); 
     } 
    }; 

    public DateTimePicker() { 
     getStyleClass().add("datetime-picker"); 
     setFormat(DefaultFormat); 
     setConverter(new InternalConverter()); 

     // Syncronize changes to the underlying date value back to the dateTimeValue 
     valueProperty().addListener((observable, oldValue, newValue) -> { 
      if (newValue == null) { 
       dateTimeValue.set(null); 
      } else { 
       if (dateTimeValue.get() == null) { 
        dateTimeValue.set(LocalDateTime.of(newValue, LocalTime.now())); 
       } else { 
        LocalTime time = dateTimeValue.get().toLocalTime(); 
        dateTimeValue.set(LocalDateTime.of(newValue, time)); 
       } 
      } 
     }); 

     // Syncronize changes to dateTimeValue back to the underlying date value 
     dateTimeValue.addListener((observable, oldValue, newValue) -> { 
      setValue(newValue == null ? null : newValue.toLocalDate()); 
     }); 

     // Persist changes onblur 
     getEditor().focusedProperty().addListener((observable, oldValue, newValue) -> { 
      if (!newValue) 
       simulateEnterPressed(); 
     }); 

    } 

    private void simulateEnterPressed() { 
     getEditor().fireEvent(new KeyEvent(getEditor(), getEditor(), KeyEvent.KEY_PRESSED, null, null, KeyCode.ENTER, false, false, false, false)); 
    } 

    public LocalDateTime getDateTimeValue() { 
     return dateTimeValue.get(); 
    } 

    public void setDateTimeValue(LocalDateTime dateTimeValue) { 
     this.dateTimeValue.set(dateTimeValue); 
    } 

    public ObjectProperty<LocalDateTime> dateTimeValueProperty() { 
     return dateTimeValue; 
    } 

    public String getFormat() { 
     return format.get(); 
    } 

    public ObjectProperty<String> formatProperty() { 
     return format; 
    } 

    public void setFormat(String format) { 
     this.format.set(format); 
    } 

    class InternalConverter extends StringConverter<LocalDate> { 
     public String toString(LocalDate object) { 
      LocalDateTime value = getDateTimeValue(); 
      return (value != null) ? value.format(formatter) : ""; 
     } 

     public LocalDate fromString(String value) { 
      if (value == null) { 
       dateTimeValue.set(null); 
       return null; 
      } 

      dateTimeValue.set(LocalDateTime.parse(value, formatter)); 
      return dateTimeValue.get().toLocalDate(); 
     } 
    } 
} 

dateTimeValue özellik zamanla değerini içerir ve valueProperty sadece tarih değeri içerir.

Bu bileşen için henüz test eklemedim, bu nedenle uygulama değişebilir, GitHub'u en son sürüm için kontrol edin.

2

NullableTimeStamp ... ile çalışabilmek için biraz "geliştirilmiş" (en azından benim ihtiyaçlarım için) sürümü, iyi, sıfır (MySQL ile) için ...

Dunno bu kimseye yardımcı olabilir ama burada ise:

NullableTimeStamp:

public class NullableTimestamp extends Timestamp { 

    public NullableTimestamp() { 
     super(0L); 
    } 
    public NullableTimestamp(long value) { 
     super(value); 
    } 

    @Override 
    public String toString() { 
     return this.getTime() > 0L ? super.toString() : ""; 
    } 

    public static NullableTimestamp valueOf(LocalDateTime localDateTime) { 
     return new NullableTimestamp(Timestamp.valueOf(localDateTime).getTime()); 
    } 
} 

ve DateTimePicker:

public class DateTimePicker extends DatePicker { 
    public static final String DefaultFormat = "yyyy-MM-dd HH:mm"; 

    private DateTimeFormatter formatter; 
    private ObjectProperty<LocalDateTime> dateTimeValue = new SimpleObjectProperty<>(LocalDateTime.now()); 
    private ObjectProperty<String> format = new SimpleObjectProperty<String>() { 
     public void set(String newValue) { 
      super.set(newValue); 
      formatter = DateTimeFormatter.ofPattern(newValue); 
     } 
    }; 

    public DateTimePicker() { 
     getStyleClass().add("datetime-picker"); 
     setFormat(DefaultFormat); 
     setConverter(new InternalConverter()); 

     // Syncronize changes to the underlying date value back to the dateTimeValue 
     valueProperty().addListener((observable, oldValue, newValue) -> { 
      if (newValue == null) { 
       dateTimeValue.set(null); 
      } else { 
       if (dateTimeValue.get() == null) { 
        dateTimeValue.set(LocalDateTime.of(newValue, LocalTime.now())); 
       } else { 
        LocalTime time = dateTimeValue.get().toLocalTime(); 
        dateTimeValue.set(LocalDateTime.of(newValue, time)); 
       } 
      } 
     }); 

     // Syncronize changes to dateTimeValue back to the underlying date value 
     dateTimeValue.addListener((observable, oldValue, newValue) -> { 
      setValue(newValue == null ? null : newValue.toLocalDate()); 
     }); 

     // Persist changes onblur 
     getEditor().focusedProperty().addListener((observable, oldValue, newValue) -> { 
      if (!newValue) 
       simulateEnterPressed(); 
     }); 

    } 

    private void simulateEnterPressed() { 
     getEditor().fireEvent(new KeyEvent(getEditor(), getEditor(), KeyEvent.KEY_PRESSED, null, null, KeyCode.ENTER, false, false, false, false)); 
    } 

    public LocalDateTime getDateTimeValue() { 
     return dateTimeValue.get(); 
    } 

    public void setDateTimeValue(LocalDateTime dateTimeValue) { 
     if(dateTimeValue.isAfter(LocalDateTime.of(1971, 6, 30, 12, 00))) 
      this.dateTimeValue.set(dateTimeValue); 
     else 
      this.dateTimeValue.set(null); 
    } 

    public ObjectProperty<LocalDateTime> dateTimeValueProperty() { 
     return dateTimeValue; 
    } 

    public String getFormat() { 
     return format.get(); 
    } 

    public ObjectProperty<String> formatProperty() { 
     return format; 
    } 

    public void setFormat(String format) { 
     this.format.set(format); 
    } 

class InternalConverter extends StringConverter<LocalDate> { 
    public String toString(LocalDate object) { 

     LocalDateTime value = getDateTimeValue(); 
     return (value != null) ? value.format(formatter) : ""; 
    } 

    public LocalDate fromString(String value) { 
     if (value == null) { 
      dateTimeValue.set(null); 
      return null; 
     } 

     dateTimeValue.set(LocalDateTime.parse(value, formatter)); 
     return dateTimeValue.get().toLocalDate(); 
     } 
    } 
} 

Temelde NULL 0L Damgası değeri maskeleri sanki ... umarım bu, şerefe yardımcı olabilir

İlgili konular