From f15ca29f21911d57bcd05928610cc02797f28577 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 29 Jan 2018 17:21:31 +0100 Subject: [client] Fix NPE with JDatePicker (by updating it) Fixes #3292 --- dozentenmodul/pom.xml | 6 ++--- .../dozmod/gui/control/QDatePickerImpl.java | 30 ++++++++++++++++------ .../org/openslx/dozmod/gui/helper/ColorUtil.java | 14 ++++++++-- .../openslx/dozmod/gui/helper/DateTimeHelper.java | 4 +-- .../window/layout/LectureDetailsWindowLayout.java | 16 ++++-------- .../wizard/layout/LectureCreationPageLayout.java | 19 ++------------ 6 files changed, 46 insertions(+), 43 deletions(-) (limited to 'dozentenmodul') diff --git a/dozentenmodul/pom.xml b/dozentenmodul/pom.xml index e744dd48..db83054e 100644 --- a/dozentenmodul/pom.xml +++ b/dozentenmodul/pom.xml @@ -186,9 +186,9 @@ 2.9.9 - org.jdatepicker - jdatepicker - 1.3.4 + io.github.lzh0379 + jdatepicker + 2.0.3 org.openslx diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/QDatePickerImpl.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/QDatePickerImpl.java index 08f90145..5260f637 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/QDatePickerImpl.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/QDatePickerImpl.java @@ -1,5 +1,6 @@ package org.openslx.dozmod.gui.control; +import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.reflect.Field; @@ -7,16 +8,17 @@ import java.util.HashSet; import java.util.Set; import javax.swing.JButton; -import javax.swing.JFormattedTextField.AbstractFormatter; import javax.swing.JTextField; import org.apache.log4j.Logger; -import org.jdatepicker.impl.JDatePanelImpl; -import org.jdatepicker.impl.JDatePickerImpl; +import org.jdatepicker.ComponentColorDefaults; +import org.jdatepicker.ComponentColorDefaults.Key; +import org.jdatepicker.JDatePicker; +import org.openslx.dozmod.gui.helper.ColorUtil; import org.openslx.dozmod.gui.helper.TextChangeListener; @SuppressWarnings("serial") -public class QDatePickerImpl extends JDatePickerImpl { +public class QDatePickerImpl extends JDatePicker { private static final Logger LOGGER = Logger.getLogger(QDatePickerImpl.class); @@ -25,19 +27,31 @@ public class QDatePickerImpl extends JDatePickerImpl { private final JTextField displayTextField; private final Set actionListeners = new HashSet<>(); + + static { + ComponentColorDefaults def = ComponentColorDefaults.getInstance(); + Color c1 = def.getColor(Key.FG_MONTH_SELECTOR); + Color c2 = def.getColor(Key.BG_MONTH_SELECTOR); + if (ColorUtil.getContrast(c1, c2) < 4.5) { + def.setColor(Key.FG_MONTH_SELECTOR, Color.WHITE); + def.setColor(Key.BG_MONTH_SELECTOR, new Color(0, 0, 128)); + } + } - public QDatePickerImpl(JDatePanelImpl datePanel, AbstractFormatter formatter) { - super(datePanel, formatter); + public QDatePickerImpl() { + super(); + + //super(datePanel, formatter); Field cfButton = null; Field cfTextField = null; try { - cfButton = JDatePickerImpl.class.getDeclaredField("button"); + cfButton = JDatePicker.class.getDeclaredField("button"); cfButton.setAccessible(true); } catch (Exception e) { LOGGER.warn("Could not get button field", e); } try { - cfTextField = JDatePickerImpl.class.getDeclaredField("formattedTextField"); + cfTextField = JDatePicker.class.getDeclaredField("formattedTextField"); cfTextField.setAccessible(true); } catch (Exception e) { LOGGER.warn("Could not get text field", e); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ColorUtil.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ColorUtil.java index f086712e..d701313f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ColorUtil.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ColorUtil.java @@ -49,11 +49,21 @@ public class ColorUtil { } public static float getBrightness(Color color) { - return Color.RGBtoHSB(color.getRed(), color.getBlue(), color.getGreen(), null)[2]; + float a[] = new float[3]; + color.getRGBColorComponents(a); + return a[0] * 0.2126f + a[1] * 0.7152f + a[2] * 0.0722f; + } + + public static float getContrast(Color a, Color b) { + float val = (getBrightness(a) + 0.05f) / (getBrightness(b) + 0.05f); + if (val < 1) { + val = 1 / val; + } + return val; } public static Color contrastColor(Color color) { return new Color(color.getRed() ^ 0x80, color.getGreen() ^ 0x80, color.getBlue() ^ 0x80); } - + } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java index 06692a7c..2ab8e9fb 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DateTimeHelper.java @@ -6,7 +6,7 @@ import java.util.Date; import javax.swing.JSpinner; import org.apache.log4j.Logger; -import org.jdatepicker.impl.JDatePickerImpl; +import org.jdatepicker.JDatePicker; public class DateTimeHelper { private static final Calendar calendar = Calendar.getInstance(); @@ -21,7 +21,7 @@ public class DateTimeHelper { * @param timeSpinner to extract the time from * @return Date represented by datePicker's day and timeSpinner's time */ - public static Date getDateFrom(JDatePickerImpl datePicker, JSpinner timeSpinner) { + public static Date getDateFrom(JDatePicker datePicker, JSpinner timeSpinner) { // start date from the DatePicker int years = datePicker.getModel().getYear(); int months = datePicker.getModel().getMonth(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java index bdae23d2..57a82b6d 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java @@ -7,7 +7,6 @@ import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.Insets; import java.util.Calendar; -import java.util.Date; import java.util.Properties; import javax.swing.BorderFactory; @@ -26,9 +25,7 @@ import javax.swing.JTextField; import javax.swing.SpinnerDateModel; import javax.swing.text.DateFormatter; -import org.jdatepicker.impl.JDatePanelImpl; -import org.jdatepicker.impl.JDatePickerImpl; -import org.jdatepicker.impl.UtilDateModel; +import org.jdatepicker.JDatePicker; import org.openslx.bwlp.thrift.iface.ImageVersionDetails; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.ComboBox; @@ -44,7 +41,6 @@ import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.cache.MetaDataCache; -import org.openslx.dozmod.util.DateLabelFormatter; import org.openslx.dozmod.util.FormatHelper; import org.openslx.sat.thrift.version.Feature; import org.openslx.thrifthelper.Comparators; @@ -85,8 +81,8 @@ public abstract class LectureDetailsWindowLayout extends JDialog { protected final JButton btnClose; protected final JButton btnDownloadImage; - protected final JDatePickerImpl dtpStartDate; - protected final JDatePickerImpl dtpEndDate; + protected final JDatePicker dtpStartDate; + protected final JDatePicker dtpEndDate; protected final JSpinner spnStartTime; protected final JSpinner spnEndTime; @@ -252,8 +248,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { // start time of the lecture JPanel startTimePanel = new JPanel(); startTimePanel.setLayout(new BoxLayout(startTimePanel, BoxLayout.LINE_AXIS)); - dtpStartDate = new QDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings), - new DateLabelFormatter()); + dtpStartDate = new QDatePickerImpl(); spnStartTime = makeTimeSpinner(23, 59); startTimePanel.add(dtpStartDate); startTimePanel.add(spnStartTime); @@ -266,8 +261,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { // end time of the lecture JPanel endTimePanel = new JPanel(); endTimePanel.setLayout(new BoxLayout(endTimePanel, BoxLayout.LINE_AXIS)); - dtpEndDate = new QDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings), - new DateLabelFormatter()); + dtpEndDate = new QDatePickerImpl(); spnEndTime = makeTimeSpinner(00, 59); endTimePanel.add(dtpEndDate); endTimePanel.add(spnEndTime); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java index f3944cfd..5df21c1d 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java @@ -1,8 +1,6 @@ package org.openslx.dozmod.gui.wizard.layout; import java.util.Calendar; -import java.util.Date; -import java.util.Properties; import javax.swing.JScrollPane; import javax.swing.JSpinner; @@ -11,15 +9,12 @@ import javax.swing.JTextField; import javax.swing.SpinnerDateModel; import javax.swing.text.DateFormatter; -import org.jdatepicker.impl.JDatePanelImpl; -import org.jdatepicker.impl.UtilDateModel; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.QDatePickerImpl; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; -import org.openslx.dozmod.util.DateLabelFormatter; @SuppressWarnings("serial") public abstract class LectureCreationPageLayout extends WizardPage { @@ -32,14 +27,6 @@ public abstract class LectureCreationPageLayout extends WizardPage { protected final JSpinner spnEndTime; protected final QLabel lblCalcPeriod; - private static final Properties pickerStrings = new Properties(); - - static { - pickerStrings.put("text.today", "Heute"); - pickerStrings.put("text.month", "Monat"); - pickerStrings.put("text.year", "Jahr"); - } - /** * Page for creating lectures * @@ -69,16 +56,14 @@ public abstract class LectureCreationPageLayout extends WizardPage { grid.nextRow(); // Start date/time - dtpStartDate = new QDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings), - new DateLabelFormatter()); + dtpStartDate = new QDatePickerImpl(); spnStartTime = makeTimeSpinner(0, 0); grid.add(new QLabel("Startdatum")); grid.add(dtpStartDate).fill(true, false).expand(true, false); grid.add(spnStartTime); grid.nextRow(); - dtpEndDate = new QDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings), - new DateLabelFormatter()); + dtpEndDate = new QDatePickerImpl(); spnEndTime = makeTimeSpinner(23, 59); grid.add(new QLabel("Enddatum")); grid.add(dtpEndDate).fill(true, false).expand(true, false); -- cgit v1.2.3-55-g7522