Hallo liebe Community,
ich arbeite aktuell an einem Tagebuch-Projekt. Durch mein Studium bin ich hauptsächlich mit Swing vertraut, hab den DatePicker von JavaFX jedoch so passend gefunden, dass ich den jetzt mittels JFXPanel in meine Swing Oberfläche eingebunden hab. Hab mich bis jetzt null mit JavaFX beschäftigt und verzeiht meine eventuellen Anfängerfehler ^^ hab aber Blut geleckt
Jedenfalls wird der DatePicker erst im Frame angezeigt, wenn ich irgendwo ins Fenster rein klicke (egal wo) und nicht beim Start :/
hier ein Ausschnitt aus der main:
Und hier die Klasse für den DatePicker:
Ich hoffe ihr könnt mir helfen. Bin ja schon froh, dass ich das Thread-Gefrickel mit Swing+JavaFX hinbekommen hab und es funktioniert auch aber das Problem stört mich dann schon noch sehr ^^
ich arbeite aktuell an einem Tagebuch-Projekt. Durch mein Studium bin ich hauptsächlich mit Swing vertraut, hab den DatePicker von JavaFX jedoch so passend gefunden, dass ich den jetzt mittels JFXPanel in meine Swing Oberfläche eingebunden hab. Hab mich bis jetzt null mit JavaFX beschäftigt und verzeiht meine eventuellen Anfängerfehler ^^ hab aber Blut geleckt
Jedenfalls wird der DatePicker erst im Frame angezeigt, wenn ich irgendwo ins Fenster rein klicke (egal wo) und nicht beim Start :/
hier ein Ausschnitt aus der main:
Java:
JPanel standardpanel = new JPanel();
standardpanel.setLayout(new BorderLayout());
JTabbedPane tabpane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
tabpane.addTab("Kalenderansicht", standardpanel);
// Thread-Handler fuer JavaFX+Swing
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JFXPanel();
Platform.runLater(new Runnable() {
@Override
public void run() {
standardpanel.add(new DiaryCalendar());
}
});
}
});
frame.add(tabpane);
frame.setVisible(true);
Und hier die Klasse für den DatePicker:
Java:
package gui;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.util.Callback;
import javafx.util.StringConverter;
@SuppressWarnings("serial")
public class DiaryCalendar extends JFXPanel {
private DatePicker _entryDatePicker;
private final String _pattern = "dd.MM.yyyy";
public DiaryCalendar() {
initUI();
}
private void initUI() {
Platform.setImplicitExit(false);
Locale.setDefault(Locale.GERMANY);
set_entryDatePicker(new DatePicker());
get_entryDatePicker().setValue(LocalDate.now());
VBox layout = new VBox();
layout.getChildren().add(new Label("Datum auswählen:"));
layout.getChildren().add(get_entryDatePicker());
setScene(new Scene(layout));
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);
if (item.isAfter(LocalDate.now())) {
setDisable(true);
setStyle("-fx-background-color: #777777;");
}
}
};
}
};
get_entryDatePicker().setDayCellFactory(dayCellFactory);
get_entryDatePicker().setShowWeekNumbers(true);
StringConverter<LocalDate> converter = new StringConverter<LocalDate>() {
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(_pattern);
@Override
public String toString(LocalDate date) {
if (date != null) {
return dateFormatter.format(date);
} else {
return "";
}
}
@Override
public LocalDate fromString(String string) {
if (string != null && !string.isEmpty()) {
return LocalDate.parse(string, dateFormatter);
} else {
return null;
}
}
};
get_entryDatePicker().setConverter(converter);
get_entryDatePicker().setPromptText(_pattern.toLowerCase());
get_entryDatePicker().requestFocus();
}
public DatePicker get_entryDatePicker() {
return _entryDatePicker;
}
public void set_entryDatePicker(DatePicker _entryDatePicker) {
this._entryDatePicker = _entryDatePicker;
}
}
Ich hoffe ihr könnt mir helfen. Bin ja schon froh, dass ich das Thread-Gefrickel mit Swing+JavaFX hinbekommen hab und es funktioniert auch aber das Problem stört mich dann schon noch sehr ^^