Skip to content

Commit edf4451

Browse files
committed
Update JDatePicker and fix DateWidget not adapting dark theme
JDatePicker 2.0.2 is compiled for java 17 and won't work for Java 8
1 parent 551b62e commit edf4451

2 files changed

Lines changed: 44 additions & 7 deletions

File tree

‎pom.xml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
<!-- NB: Deploy releases to the SciJava Maven repository. -->
112112
<releaseProfiles>sign,deploy-to-scijava</releaseProfiles>
113113

114-
<jdatepicker.version>1.3.2</jdatepicker.version>
114+
<jdatepicker.version>2.0.1</jdatepicker.version>
115115
<object-inspector.version>0.1</object-inspector.version>
116116

117117
<!-- TEMP: for Task#log(); drop once propagated to pom-scijava. -->
@@ -171,7 +171,7 @@
171171
<version>${object-inspector.version}</version>
172172
</dependency>
173173
<dependency>
174-
<groupId>net.sourceforge.jdatepicker</groupId>
174+
<groupId>org.jdatepicker</groupId>
175175
<artifactId>jdatepicker</artifactId>
176176
<version>${jdatepicker.version}</version>
177177
</dependency>

‎src/main/java/org/scijava/ui/swing/widget/SwingDateWidget.java‎

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,18 @@
2929

3030
package org.scijava.ui.swing.widget;
3131

32+
import java.awt.Color;
3233
import java.awt.event.ActionEvent;
3334
import java.awt.event.ActionListener;
3435
import java.util.Date;
3536

3637
import javax.swing.JPanel;
38+
import javax.swing.UIManager;
3739

38-
import net.sourceforge.jdatepicker.impl.JDatePanelImpl;
39-
import net.sourceforge.jdatepicker.impl.JDatePickerImpl;
40-
import net.sourceforge.jdatepicker.impl.UtilDateModel;
40+
import org.jdatepicker.ComponentColorDefaults;
41+
import org.jdatepicker.ComponentColorDefaults.Key;
42+
import org.jdatepicker.JDatePicker;
43+
import org.jdatepicker.UtilDateModel;
4144

4245
import org.scijava.log.LogService;
4346
import org.scijava.plugin.Parameter;
@@ -75,15 +78,49 @@ public void set(final WidgetModel model) {
7578
super.set(model);
7679

7780
dateModel = new UtilDateModel();
78-
final JDatePickerImpl datePicker =
79-
new JDatePickerImpl(new JDatePanelImpl(dateModel), null);
81+
applyThemeColors();
82+
// NB: the picker must be built on our model, or user picks never reach it
83+
final JDatePicker datePicker = new JDatePicker(dateModel);
8084
setToolTip(datePicker);
8185
getComponent().add(datePicker);
8286
datePicker.addActionListener(this);
8387

8488
refreshWidget();
8589
}
8690

91+
// -- Helper methods --
92+
93+
/**
94+
* Maps the picker colors to the current look and feel. Note that
95+
* {@link ComponentColorDefaults} is a global singleton read when a picker
96+
* is created, so existing pickers keep their colors on a theme change
97+
*/
98+
private static void applyThemeColors() {
99+
setColor(Key.BG_MONTH_SELECTOR, "TableHeader.background");
100+
setColor(Key.FG_MONTH_SELECTOR, "TableHeader.foreground");
101+
setColor(Key.BG_GRID_HEADER, "TableHeader.background");
102+
setColor(Key.FG_GRID_HEADER, "TableHeader.foreground");
103+
setColor(Key.BG_GRID, "Table.background");
104+
setColor(Key.BG_GRID_NOT_SELECTABLE, "Panel.background");
105+
setColor(Key.FG_GRID_THIS_MONTH, "Table.foreground");
106+
setColor(Key.FG_GRID_OTHER_MONTH, "Label.disabledForeground");
107+
setColor(Key.FG_GRID_TODAY, "Component.accentColor");
108+
setColor(Key.FG_GRID_SELECTED, "Table.selectionForeground");
109+
setColor(Key.BG_GRID_SELECTED, "Table.selectionBackground");
110+
setColor(Key.FG_GRID_TODAY_SELECTED, "Table.selectionForeground");
111+
setColor(Key.BG_GRID_TODAY_SELECTED, "Table.selectionBackground");
112+
setColor(Key.BG_TODAY_SELECTOR, "Panel.background");
113+
setColor(Key.FG_TODAY_SELECTOR_ENABLED, "Label.foreground");
114+
setColor(Key.FG_TODAY_SELECTOR_DISABLED, "Label.disabledForeground");
115+
setColor(Key.POPUP_BORDER, "Component.borderColor");
116+
}
117+
118+
/** Sets a picker color from a UIManager key, if the key is defined */
119+
private static void setColor(final Key key, final String uiKey) {
120+
final Color color = UIManager.getColor(uiKey);
121+
if (color != null) ComponentColorDefaults.getInstance().setColor(key, color);
122+
}
123+
87124
// -- Typed methods --
88125

89126
@Override

0 commit comments

Comments
 (0)