diff --git a/designer-base/src/main/java/com/fine/theme/light/ui/FineCalendarPaneUI.java b/designer-base/src/main/java/com/fine/theme/light/ui/FineCalendarPaneUI.java
new file mode 100644
index 0000000000..17cb012f04
--- /dev/null
+++ b/designer-base/src/main/java/com/fine/theme/light/ui/FineCalendarPaneUI.java
@@ -0,0 +1,59 @@
+package com.fine.theme.light.ui;
+
+import com.formdev.flatlaf.ui.FlatUIUtils;
+import com.fr.design.gui.date.UICalendarPanel;
+
+import javax.swing.JComponent;
+import javax.swing.UIManager;
+import javax.swing.border.LineBorder;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.PanelUI;
+import java.awt.Color;
+
+
+/**
+ * {@link UICalendarPanel} 的 UI 样式
+ *
+ * @author lemon
+ * @since 12.0
+ * Created on 2024/09/22
+ */
+public class FineCalendarPaneUI extends PanelUI {
+ protected Color defaultBackground;
+
+ /**
+ * @param shared
+ * @since 2
+ */
+ protected FineCalendarPaneUI() {
+ super();
+ }
+
+ /**
+ * 创建UI
+ *
+ * @param c 组件
+ * @return ComponentUI
+ */
+ public static ComponentUI createUI(JComponent c) {
+ return FlatUIUtils.createSharedUI(FineCalendarPaneUI.class, FineCalendarPaneUI::new);
+ }
+
+ /**
+ * @param c the component where this UI delegate is being installed
+ */
+ public void installUI(JComponent c) {
+ super.installUI(c);
+ defaultBackground = UIManager.getColor("Calendar.background");
+
+ //renderer this
+ c.setBackground(defaultBackground);
+ c.setBorder(new LineBorder(FlatUIUtils.getUIColor("defaultBorderColor", Color.BLACK)));
+ }
+
+ @Override
+ public void uninstallUI(JComponent c) {
+ super.uninstallUI(c);
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fine/theme/light/ui/FineDayLabelUI.java b/designer-base/src/main/java/com/fine/theme/light/ui/FineDayLabelUI.java
new file mode 100644
index 0000000000..0018afd292
--- /dev/null
+++ b/designer-base/src/main/java/com/fine/theme/light/ui/FineDayLabelUI.java
@@ -0,0 +1,140 @@
+package com.fine.theme.light.ui;
+
+import com.formdev.flatlaf.ui.FlatLabelUI;
+import com.formdev.flatlaf.ui.FlatRoundBorder;
+import com.formdev.flatlaf.ui.FlatUIUtils;
+import com.fr.design.gui.date.UIDayLabel;
+
+import javax.swing.JComponent;
+import javax.swing.UIManager;
+import javax.swing.plaf.ComponentUI;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+
+/**
+ * {@link UIDayLabel} 的 UI 样式
+ *
+ * @author lemon
+ * @since 12.0
+ * Created on 2024/09/22
+ */
+public class FineDayLabelUI extends FlatLabelUI {
+ protected Color defaultBackground;
+ protected Color selectedBackground;
+ protected Color hoverBackground;
+ protected Color pressedBackground;
+ protected Color otherMonthForeground;
+
+ protected int arc;
+
+ /**
+ * @since 2
+ */
+ protected FineDayLabelUI() {
+ super(false);
+ }
+
+ /**
+ * 创建UI
+ *
+ * @param c 组件
+ * @return ComponentUI
+ */
+ public static ComponentUI createUI(JComponent c) {
+ return FlatUIUtils.createSharedUI(FineDayLabelUI.class, FineDayLabelUI::new);
+ }
+
+ /**
+ * @param c the component where this UI delegate is being installed
+ */
+ public void installUI(JComponent c) {
+ super.installUI(c);
+ selectedBackground = UIManager.getColor("Calendar.day.selectedBackground");
+ hoverBackground = UIManager.getColor("Calendar.day.hoverBackground");
+ pressedBackground = UIManager.getColor("Calendar.day.pressedBackground");
+ defaultBackground = UIManager.getColor("Calendar.background");
+ otherMonthForeground = UIManager.getColor("Calendar.dayOtherMonth.foreground");
+
+ arc = UIManager.getInt("Calendar.day.arc");
+ }
+
+ @Override
+ public void uninstallUI(JComponent c) {
+ super.uninstallUI(c);
+ }
+
+ /**
+ * UICalendarPanel paint, 目前只对 {@link UIDayLabel} 样式自定义,其余使用默认样式
+ *
+ * @param g the Graphics
context in which to paint
+ * @param c the component being painted;
+ * this argument is often ignored,
+ * but might be used if the UI object is stateless
+ * and shared by multiple components
+ */
+ public void paint(Graphics g, JComponent c) {
+ super.paint(g, c);
+ if (c instanceof UIDayLabel) {
+ paintDayLabel((UIDayLabel) c);
+ }
+ }
+
+ private void paintDayLabel(UIDayLabel label) {
+ if (!label.isSmallLabel()) {
+ label.setBackground(getBackgroundColor(label));
+ return;
+ }
+
+ label.setBorder(new DayLabelRoundedBorder());
+
+ if (!label.isCurrentMonth()) {
+ label.setForeground(otherMonthForeground);
+ }
+ }
+
+ private Color getBackgroundColor(UIDayLabel dayLabel) {
+ if (dayLabel.isSelected()) {
+ return selectedBackground;
+ }
+ if (dayLabel.isHovered()) {
+ return hoverBackground;
+ }
+ if (dayLabel.isPressed()) {
+ return pressedBackground;
+ }
+ return defaultBackground;
+ }
+
+ /**
+ * {@link UIDayLabel} 的 border 样式
+ */
+ private class DayLabelRoundedBorder extends FlatRoundBorder {
+
+ public DayLabelRoundedBorder() {
+ }
+
+ @Override
+ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
+ Graphics2D g2 = (Graphics2D) g.create();
+
+ try {
+ FlatUIUtils.setRenderingHints(g2);
+ g2.setColor(getBackgroundColor((UIDayLabel) c));
+ g2.fillRoundRect(0, 0, width, height, arc, arc);
+
+ // 避免文字被背景色覆盖
+ UIDayLabel dayLabel = (UIDayLabel) c;
+ g2.setColor(dayLabel.getForeground());
+ FontMetrics metrics = g2.getFontMetrics(dayLabel.getFont());
+ int x1 = (width - metrics.stringWidth(dayLabel.getText())) / 2;
+ int y1 = ((height - metrics.getHeight()) / 2) + metrics.getAscent();
+ g2.drawString(dayLabel.getText(), x1, y1);
+ } finally {
+ g2.dispose();
+ }
+ }
+ }
+}
diff --git a/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java b/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java
index 0dc3c2df29..03d50ac371 100644
--- a/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java
+++ b/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java
@@ -51,6 +51,7 @@ public interface FineUIStyle {
String DEFAULT_TABLE = "defaultTable";
String WHITE_BUTTON = "whiteButton";
String ORIGINAL_BUTTON = "originalButton";
+ String GRAY_BUTTON = "grayButton";
String DETAIL_LABEL = "detailLabel";
String WIDGET_EVENT_LABEL = "widgetEventLabel";
diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
index b7b6a39fe7..6b6d887ef7 100644
--- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
+++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
@@ -706,11 +706,21 @@ public class PreviewTablePane extends BasicPane {
};
previewPane.setLayout(FRGUIPaneFactory.createBorderLayout());
if (nameDataModels.length > 0) {
- previewPane.add(tabbedPane.withHeadRatio(0.8f).withTabLayout(buildTabLayout(nameDataModels)).build(), BorderLayout.CENTER);
+ int[] tabLayout = buildTabLayout(nameDataModels);
+ float headRatio = buildHeadRatio(tabLayout);
+ previewPane.add(tabbedPane.withHeadRatio(headRatio).withTabLayout(tabLayout).build(), BorderLayout.CENTER);
}
previewPane.showWindow(new JFrame()).setVisible(true);
}
+ private static float buildHeadRatio(int[] tabLayout) {
+ float maxLen = 0.8f;
+ if (tabLayout.length == 1) {
+ return (float) tabLayout[0] / TAB_MAX_COUNT_WITH_LINE;
+ }
+ return maxLen;
+ }
+
private static int[] buildTabLayout(NameDataModel[] nameDataModels) {
int length = nameDataModels.length;
int size = (length + TAB_MAX_COUNT_WITH_LINE - 1) / TAB_MAX_COUNT_WITH_LINE;
diff --git a/designer-base/src/main/java/com/fr/design/gui/date/CalendarNumberField.java b/designer-base/src/main/java/com/fr/design/gui/date/CalendarNumberField.java
index 1908751c6a..b965f2929a 100644
--- a/designer-base/src/main/java/com/fr/design/gui/date/CalendarNumberField.java
+++ b/designer-base/src/main/java/com/fr/design/gui/date/CalendarNumberField.java
@@ -12,6 +12,8 @@ import java.awt.Toolkit;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
+import static com.fine.theme.utils.FineUIScale.createScaleDimension;
+
/**
* Created with IntelliJ IDEA.
* User: 小灰灰
@@ -19,12 +21,13 @@ import java.awt.event.FocusEvent;
* Time: 上午11:06
* To change this template use File | Settings | File Templates.
*/
-public class CalendarNumberField extends UINumberField {
+class CalendarNumberField extends UINumberField {
private static final int NUM_TEN = 10;
public CalendarNumberField(double maxValue) {
super(2, 0, 0, maxValue);
+ this.setHorizontalAlignment(CENTER);
this.setBorderPainted(false);
addFocusListener(new FocusAdapter() {
@Override
@@ -32,7 +35,6 @@ public class CalendarNumberField extends UINumberField {
setValue(getIntValue());
}
});
- this.setFont(DesignUtils.getDefaultGUIFont());
}
public void setValue(int value) {
@@ -96,7 +98,7 @@ public class CalendarNumberField extends UINumberField {
}
public Dimension getPreferredSize() {
- return new Dimension(24, 11);
+ return createScaleDimension(24, 24);
}
public boolean shouldResponseChangeListener() {
@@ -104,7 +106,7 @@ public class CalendarNumberField extends UINumberField {
}
public Insets getInsets() {
- return new Insets(0, 6, 0, 4);
+ return new Insets(0, 0, 0, 0);
}
}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/design/gui/date/UICalendarPanel.java b/designer-base/src/main/java/com/fr/design/gui/date/UICalendarPanel.java
index f4b8a5b123..e0f668951c 100644
--- a/designer-base/src/main/java/com/fr/design/gui/date/UICalendarPanel.java
+++ b/designer-base/src/main/java/com/fr/design/gui/date/UICalendarPanel.java
@@ -1,53 +1,41 @@
package com.fr.design.gui.date;
import com.fanruan.product.ProductConstantsBase;
-import com.formdev.flatlaf.ui.FlatUIUtils;
+import com.fine.theme.icon.LazyIcon;
+import com.fine.theme.light.ui.FineRoundBorder;
+import com.fine.theme.utils.FineUIStyle;
+import com.fine.theme.utils.FineUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
-import com.fr.base.BaseUtils;
-import com.fr.base.background.GradientBackground;
+import com.fr.design.border.FineBorderFactory;
import com.fr.design.carton.MonthlyCartonFile;
import com.fr.design.carton.SwitchForSwingChecker;
-import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel;
-import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.DesignUtils;
-import com.fr.design.utils.gui.GUIPaintUtils;
import com.fr.general.GeneralUtils;
-import com.fr.stable.Constants;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
-import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.Icon;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
-import javax.swing.UIManager;
-import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
-import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
-import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
-import java.awt.geom.RoundRectangle2D;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -55,25 +43,24 @@ import java.util.Date;
import java.util.HashSet;
import java.util.Set;
+import static com.fine.swing.ui.layout.Layouts.cell;
+import static com.fine.swing.ui.layout.Layouts.fix;
+import static com.fine.swing.ui.layout.Layouts.flex;
+import static com.fine.swing.ui.layout.Layouts.row;
+import static com.fine.theme.utils.FineUIScale.createScaleDimension;
import static com.fine.theme.utils.FineUIScale.scale;
+import static com.fine.theme.utils.FineUIStyle.STYLE_TEXT;
+import static com.fine.theme.utils.FineUIStyle.setStyle;
public class UICalendarPanel extends JPanel {
- private static final Font FONT_UI = DesignUtils.getDefaultGUIFont().applySize(scale(12));
- private static final Font FONT_BLACK = new Font(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Black_Font"), Font.PLAIN, scale(12));
+ private static final String UI_CLASS_ID = "CalendarPaneUI";
+
private static final int WEEKDAY_COUNT = 7;
private static final int TOTAL_DAYS_COUNT = 42;
-
- private static final int WIDTH = scale(31);
- private static final int HEIGHT = scale(19);
- private static final int START_X = scale(30);
- private static final int START_Y = scale(19);
+ protected final Insets defaultInsets = new Insets(0, 6, 0, 6);
//卡顿日志所在地址
private static final String JOURNAL_FILE_PATH = StableUtils.pathJoin(ProductConstantsBase.getEnvHome(), "journal_log");
- protected Color selectedBackground;
- protected Color selectedForeground;
- protected Color background;
- protected Color foreground;
private Calendar calendar = null;
private UILabel monthLabel = null;
@@ -83,9 +70,11 @@ public class UICalendarPanel extends JPanel {
private boolean isSupportDateChangeListener = false;
private java.util.Date selectedDate = null;
private boolean isTimePicker;
- private final Color LABEL_FORGE_GROUND = new Color(0x6F6F6);
private MouseListener todayListener;
private UIDayLabel lbToday;
+ private static final int WEEK_LABEL_WIDTH = 24;
+ private static final int WEEK_LABEL_HEIGHT = 24;
+ private final int ICON_WIDTH = 12;
/**
* 一个int类型用于判断日历是否是专门用于处理卡顿的设计器反馈箱中的日历
* 0表示是
@@ -125,26 +114,12 @@ public class UICalendarPanel extends JPanel {
this.selectedDate = selectedDate;
this.isTimePicker = isTimerPicker;
calendar = Calendar.getInstance();
-
- selectedBackground = UIManager.getColor(
- "ComboBox.selectionBackground");
- selectedForeground = UIManager.getColor(
- "ComboBox.selectionForeground");
- background = UIManager.getColor("ComboBox.background");
- foreground = UIManager.getColor("ComboBox.foreground");
-
dayBttListener = createDayBttListener();
- //renderer this
- setPreferredSize(scale(new Dimension(218, 179)));
- setBackground(FlatUIUtils.getUIColor("fill.normal", Color.WHITE));
- setBorder(new LineBorder(FlatUIUtils.getUIColor("defaultBorderColor", Color.BLACK)));
-
setLayout(FRGUIPaneFactory.createBorderLayout());
add(BorderLayout.NORTH, createNorthPane());
add(BorderLayout.CENTER, createCenterPane());
if (isTimerPicker) {
- setPreferredSize(scale(new Dimension(218, 209)));
add(BorderLayout.SOUTH, createSouthPane());
updateHMS();
}
@@ -158,45 +133,23 @@ public class UICalendarPanel extends JPanel {
// << < yyyy/MM/dd > >>
private JPanel createNorthPane() {
JPanel pNorth = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane();
- pNorth.setBackground(new Color(0xFFFFFF));
- pNorth.setPreferredSize(scale(new Dimension(1, 22)));
-
+ pNorth.setPreferredSize(new Dimension(pNorth.getPreferredSize().width, scale(40)));
+ pNorth.setOpaque(false);
pNorth.add(Box.createHorizontalStrut(5));
- pNorth.add(createSkipButton(Calendar.YEAR, -1, new Icon[]{
- BaseUtils.readIcon("/com/fr/design/images/calender/year_reduce.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/year_reduce_hover.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/year_reduce_click.png")
- }));
+ pNorth.add(createSkipButton(Calendar.YEAR, -1, new LazyIcon("drag_left")));
pNorth.add(Box.createHorizontalStrut(11));
- UILabel monthMinus = createSkipButton(Calendar.MONTH, -1, new Icon[]{
- BaseUtils.readIcon("/com/fr/design/images/calender/month_reduce.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/month_reduce_hover.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/month_reduce_click.png")
- });
- monthMinus.setPreferredSize(scale(new Dimension(20, 20)));
+ UIButton monthMinus = createSkipButton(Calendar.MONTH, -1, new LazyIcon("left_arrow"));
pNorth.add(monthMinus);
monthLabel = new UILabel("", UILabel.CENTER);
- monthLabel.setBackground(new Color(0xFFFFFF));
- monthLabel.setForeground(new Color(0x000000));
- monthLabel.setFont(FONT_UI);
pNorth.add(Box.createHorizontalGlue());
pNorth.add(monthLabel);
pNorth.add(Box.createHorizontalGlue());
- UILabel monthPlus = createSkipButton(Calendar.MONTH, 1, new Icon[]{
- BaseUtils.readIcon("/com/fr/design/images/calender/month_add.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/month_add_hover.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/month_add_click.png")
- });
- monthPlus.setPreferredSize(scale(new Dimension(20, 20)));
+ UIButton monthPlus = createSkipButton(Calendar.MONTH, 1, new LazyIcon("right_arrow"));
monthPlus.setHorizontalAlignment(SwingConstants.RIGHT);
pNorth.add(monthPlus);
pNorth.add(Box.createHorizontalStrut(11));
- pNorth.add(createSkipButton(Calendar.YEAR, 1, new Icon[]{
- BaseUtils.readIcon("/com/fr/design/images/calender/year_add.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/year_add_hover.png"),
- BaseUtils.readIcon("/com/fr/design/images/calender/year_add_click.png")
- }));
+ pNorth.add(createSkipButton(Calendar.YEAR, 1, new LazyIcon("drag_right")));
pNorth.add(Box.createHorizontalStrut(5));
return pNorth;
@@ -205,10 +158,8 @@ public class UICalendarPanel extends JPanel {
private JPanel createCenterPane() {
//星期日 星期一 星期二 星期三 星期四 星期五 星期六
- JPanel pWeeks = new JPanel(new GridLayout(1, 7, 1, 0));
- pWeeks.setPreferredSize(scale(new Dimension(216, 22)));
- pWeeks.setBackground(new Color(0xFFFFFF));
- pWeeks.setOpaque(true);
+ JPanel pWeeks = new JPanel(new GridLayout(1, 7, 9, 0));
+ pWeeks.setOpaque(false);
String[] strWeeks = new String[]{StringUtils.EMPTY, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Sun"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Mon"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tue"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Wed"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Thu"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Fri"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Sat")
@@ -216,61 +167,47 @@ public class UICalendarPanel extends JPanel {
for (int i = 1; i <= WEEKDAY_COUNT; i++) {
UILabel label = new UILabel();
label.setHorizontalAlignment(UILabel.CENTER);
- label.setForeground(new Color(0x4D4C4C));
- label.setFont(FONT_BLACK);
label.setText(strWeeks[i]);
+ label.setPreferredSize(createScaleDimension(WEEK_LABEL_WIDTH, WEEK_LABEL_HEIGHT));
pWeeks.add(label);
}
+ pWeeks.setBorder(new ScaledEmptyBorder(3, 9, 3, 9));
//中间放日期的面板
days = new DayPane();
- days.setOpaque(true);
- days.setPreferredSize(scale(new Dimension(216, 115)));
+ days.setOpaque(false);
+ days.setPreferredSize(new Dimension(pWeeks.getPreferredSize().width, scale(165)));
JPanel pCenter = FRGUIPaneFactory.createBorderLayout_S_Pane();
- pCenter.setOpaque(true);
+ pCenter.setOpaque(false);
pCenter.add(pWeeks, BorderLayout.NORTH);
pCenter.add(days, BorderLayout.CENTER);
//显示今天的日期,直接单击图标跳到今天
- GradientPane pToday = new GradientPane(new GradientBackground(new Color(0x097BDA), new Color(0x40A3EE), GradientBackground.TOP2BOTTOM), false);
- pToday.setPreferredSize(scale(new Dimension(216, 18)));
- pToday.setLayout(new BorderLayout());
lbToday = new UIDayLabel(new Date(), false);
- lbToday.setForeground(new Color(0x000000));
- todayListener = createTodayListener(pToday, lbToday);
+ lbToday.setPreferredSize(new Dimension(lbToday.getPreferredSize().width, scale(30)));
+ lbToday.setBorder(FineBorderFactory.createDefaultTopBorder());
+ todayListener = createTodayListener(lbToday);
lbToday.addMouseListener(todayListener);
- pToday.setBackground(new Color(0xF0F0F0));
- pToday.add(lbToday, BorderLayout.CENTER);
- pCenter.add(pToday, BorderLayout.SOUTH);
+ pCenter.add(lbToday, BorderLayout.SOUTH);
return pCenter;
}
private JPanel createSouthPane() {
JPanel sPane = new JPanel();
- sPane.setPreferredSize(scale(new Dimension(216, 30)));
- sPane.setBackground(Color.WHITE);
- sPane.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 6));
+ sPane.setOpaque(false);
+ sPane.setLayout(new BorderLayout());
UILabel timeLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Time") + ":");
- timeLabel.setBorder(new ScaledEmptyBorder(0, 9, 0, 5));
- timeLabel.setFont(FONT_UI);
- sPane.add(timeLabel);
hms = new HMSPane();
- sPane.add(hms);
-
- UILabel gap = new UILabel();
- gap.setPreferredSize(scale(new Dimension(26, 1)));
- sPane.add(gap);
UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OK")) {
public Dimension getPreferredSize() {
- return scale(new Dimension(32, 18));
+ return createScaleDimension(48, 24);
}
public Insets getInsets() {
return new Insets(0, 0, 0, 0);
}
};
- okButton.setFont(FONT_UI);
okButton.setVerticalAlignment(SwingConstants.CENTER);
okButton.addActionListener(new ActionListener() {
@@ -282,18 +219,11 @@ public class UICalendarPanel extends JPanel {
}
});
- sPane.add(okButton);
-
+ sPane.add(row(cell(timeLabel).weight(36), cell(hms).weight(180), flex(), cell(okButton).weight(48)).getComponent());
+ sPane.setBorder(new ScaledEmptyBorder(10, 12, 10, 12));
return sPane;
}
- public void resetHMSPaneSelectedNumberField() {
- if (this.hms != null) {
- this.hms.selectedNumberField = this.hms.hField;
- this.hms.nextButton.requestFocus();
- }
- }
-
/**
* 创建上一月,下一月,上一年,下一年"按钮"
*
@@ -301,37 +231,20 @@ public class UICalendarPanel extends JPanel {
* @param amount int
* @return UILabel
*/
- protected UILabel createSkipButton(final int field, final int amount, final Icon[] icons) {
- if (icons.length != 3) {
- return new UILabel();
- }
- UILabel label = new UILabel();
- label.setIcon(icons[0]);
- label.setRequestFocusEnabled(false);
- label.addMouseListener(createSkipListener(label, field, amount, icons));
- return label;
+ protected UIButton createSkipButton(final int field, final int amount, final Icon icon) {
+ UIButton button = new UIButton();
+ FineUIStyle.setStyle(button, FineUIStyle.ORIGINAL_BUTTON);
+ button.setIcon(icon);
+ button.setRequestFocusEnabled(false);
+ button.addMouseListener(createSkipListener(field, amount));
+ return button;
}
- protected MouseListener createSkipListener(final UILabel label, final int field,
- final int amount, final Icon[] icons) {
+ protected MouseListener createSkipListener(final int field, final int amount) {
return new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
- label.setIcon(icons[1]);
calendar.add(field, amount);
updateDays();
- resetHMSPaneSelectedNumberField();
- }
-
- public void mouseEntered(MouseEvent e) {
- label.setIcon(icons[1]);
- }
-
- public void mouseExited(MouseEvent e) {
- label.setIcon(icons[0]);
- }
-
- public void mousePressed(MouseEvent e) {
- label.setIcon(icons[2]);
}
};
}
@@ -383,10 +296,6 @@ public class UICalendarPanel extends JPanel {
}
} else {
label.addMouseListener(dayBttListener);
- label.setEnabled(isCurrentMonth);
- }
- if (!isCurrentMonth) {
- label.setForeground(LABEL_FORGE_GROUND);
}
}
/**
@@ -432,30 +341,23 @@ public class UICalendarPanel extends JPanel {
}
for (int i = 0; i < TOTAL_DAYS_COUNT; i++) {
setupCalendar.add(Calendar.DATE, 1);
- GradientPane gp = new GradientPane(new GradientBackground(new Color(0xFEFEFE), new Color(0xF3F2F3), GradientBackground.TOP2BOTTOM), true);
- gp.setIndex(i);
- gp.setLayout(new BorderLayout());
- gp.setBorder(null);
UIDayLabel label = new UIDayLabel(setupCalendar.getTime());
- label.setHorizontalAlignment(SwingConstants.RIGHT);
- label.setBorder(new ScaledEmptyBorder(0, 0, 0, 9));
+ label.setIndex(i);
if ("1".equals(label.getText())) {
isCurrentMonth = !isCurrentMonth;
}
setUIDayLabel(label, isCurrentMonth, setupCalendar, logSet);
+ label.setCurrentMonth(isCurrentMonth);
+ days.add(label);
//当前选择的日期
if (setupCalendar.get(Calendar.DAY_OF_MONTH) == selectedCalendar.get(Calendar.DAY_OF_MONTH) && isCurrentMonth) {
- gp.setGradientBackground(new GradientBackground(new Color(0x097BD9), new Color(0x41A3EE), GradientBackground.TOP2BOTTOM));
- gp.add(label, BorderLayout.CENTER);
- days.add(gp);
days.setSelectedIndex(i);
+ label.setSelected(true);
this.selectedDate = label.getDate();
this.calendar.setTime(this.selectedDate);
- } else {
- gp.add(label, BorderLayout.CENTER);
- days.add(gp);
}
}
+ days.setBorder(new ScaledEmptyBorder(3, 9, 3, 9));
days.validate();
}
@@ -466,33 +368,11 @@ public class UICalendarPanel extends JPanel {
}
}
- protected MouseListener createTodayListener(final GradientPane jp, final UIDayLabel label) {
+ protected MouseListener createTodayListener(final UIDayLabel label) {
return new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- jp.setBorder(BorderFactory.createLineBorder(new Color(0x3868AA)));
- jp.setPaintGradientBackground(true);
- jp.repaint();
- label.setForeground(new Color(0xFFFFFF));
- }
-
- @Override
- public void mouseExited(MouseEvent e) {
- jp.setBackground(new Color(0xF0F0F0));
- }
-
- @Override
- public void mouseEntered(MouseEvent e) {
- jp.setBackground(new Color(0xC8DDEE));
- }
@Override
public void mouseReleased(MouseEvent e) {
- jp.setBackground(new Color(0xF0F0F0));
- label.setForeground(new Color(0x000000));
- jp.setBorder(null);
- jp.setPaintGradientBackground(false);
- jp.repaint();
if (isTimePicker) {
UICalendarPanel.this.setSelectedDate(label.getDate());
updateDays();
@@ -501,7 +381,6 @@ public class UICalendarPanel extends JPanel {
UICalendarPanel.this.setSelectedDate(label.getDate());
UICalendarPanel.this.isSupportDateChangeListener = false;
}
- resetHMSPaneSelectedNumberField();
}
};
}
@@ -511,12 +390,11 @@ public class UICalendarPanel extends JPanel {
public void mousePressed(MouseEvent e) {
if (isEnabled()) {
UIDayLabel com = (UIDayLabel) e.getComponent();
- GradientPane gp = (GradientPane) com.getParent();
- if (days.selectedIndex != -1) {
- ((GradientPane) days.getComponent(days.selectedIndex)).setGradientBackground(new GradientBackground(new Color(0xFEFEFE), new Color(0xF3F2F3), GradientBackground.TOP2BOTTOM));
- }
- gp.setGradientBackground(new GradientBackground(new Color(0x097BD9), new Color(0x41A3EE), GradientBackground.TOP2BOTTOM));
- days.setSelectedIndex(gp.getIndex());
+ days.setSelectedIndex(com.getIndex());
+ com.setHovered(false);
+ com.setPressed(true);
+ com.getParent().validate();
+ com.getParent().repaint();
}
}
@@ -530,31 +408,30 @@ public class UICalendarPanel extends JPanel {
UICalendarPanel.this.setSelectedDate(com.getDate());
UICalendarPanel.this.isSupportDateChangeListener = false;
}
- resetHMSPaneSelectedNumberField();
}
public void mouseEntered(MouseEvent e) {
if (isEnabled()) {
- JComponent com = (JComponent) e.getComponent();
- GradientPane gp = (GradientPane) com.getParent();
- if (gp.getIndex() == days.selectedIndex) {
+ UIDayLabel com = (UIDayLabel) e.getComponent();
+ com.setHovered(true);
+ if (com.getIndex() == days.selectedIndex) {
return;
}
- gp.setGradientBackground(new GradientBackground(new Color(0xFFFFFF), new Color(0xEAF4FC), GradientBackground.TOP2BOTTOM));
- days.setFloatIndex(gp.getIndex());
+ days.setFloatIndex(com.getIndex());
+ com.getParent().validate();
+ com.getParent().repaint();
}
}
public void mouseExited(MouseEvent e) {
if (isEnabled()) {
- JComponent com = (JComponent) e.getComponent();
- GradientPane gp = (GradientPane) com.getParent();
- if (gp.getIndex() != days.selectedIndex) {
- gp.setGradientBackground(new GradientBackground(new Color(0xFEFEFE), new Color(0xF3F2F3), GradientBackground.TOP2BOTTOM));
- }
+ UIDayLabel com = (UIDayLabel) e.getComponent();
+ com.setHovered(false);
+ com.setPressed(false);
days.setFloatIndex(-1);
- days.repaint();
+ com.getParent().validate();
+ com.getParent().repaint();
}
}
};
@@ -596,127 +473,34 @@ public class UICalendarPanel extends JPanel {
return selectedDate;
}
- private class GradientPane extends JPanel {
-
- private int index;
- private boolean isGradientBackground;
- private GradientBackground gradientBackground;
-
- public GradientPane() {
-
- }
-
- public GradientPane(GradientBackground gradientBackground, boolean isGradientBackground) {
- super();
- this.gradientBackground = gradientBackground;
- this.isGradientBackground = isGradientBackground;
- }
-
- public void paint(Graphics g) {
- super.paint(g);
- if (isGradientBackground && gradientBackground != null) {
- gradientBackground.paint(g, new Rectangle(this.getWidth(), this.getHeight()));
- }
- paintChildren(g);
- }
-
- public void setPaintGradientBackground(boolean flag) {
- this.isGradientBackground = flag;
- }
-
- public void setGradientBackground(GradientBackground gradientBackground) {
- this.gradientBackground = gradientBackground;
- }
-
- public void setIndex(int i) {
- this.index = i;
- }
-
- public int getIndex() {
- return this.index;
- }
-
- public void setForeground(Color c) {
- super.setForeground(c);
- if (getComponentCount() > 0) {
- getComponent(0).setForeground(c);
- }
- }
- }
-
private class DayPane extends JPanel {
private Color floatColor = new Color(0xC5E2F9);
- private Color selectedColor = new Color(0x41A3EE);
private int floateIndex;
private int selectedIndex;
public DayPane() {
floateIndex = -1;
selectedIndex = -1;
- this.setLayout(new GridLayout(6, 7, 1, 1));
- this.setBackground(new Color(0xFFFFFF));
- this.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, new Color(0xDADADA)));
+ this.setLayout(new GridLayout(6, 7, scale(9), scale(3)));
}
public void paint(Graphics g) {
super.paint(g);
- int width = UICalendarPanel.WIDTH;
- int height = UICalendarPanel.HEIGHT;
Color oldColor = g.getColor();
- g.setColor(new Color(0xDADADA));
- int start_x = UICalendarPanel.START_X;
- int start_y = UICalendarPanel.START_Y;
- for (int i = 0; i < 6; i++) {
- g.drawLine(start_x, 0, start_x, getHeight());
- start_x += width;
- }
- for (int i = 0; i < 5; i++) {
- g.drawLine(0, start_y, getWidth(), start_y);
- start_y += height;
- }
if (floateIndex > -1) {
g.setColor(floatColor);
- paintChindPane(g, floateIndex);
- }
- if (selectedIndex > -1) {
- g.setColor(selectedColor);
- paintChindPane(g, selectedIndex);
}
g.setColor(oldColor);
}
- private void paintChindPane(Graphics g, int index) {
- if (index % 7 == 0) {
- int y1 = index / 7 * UICalendarPanel.HEIGHT;
- g.drawLine(0, y1, UICalendarPanel.START_X, y1);
- g.drawLine(0, y1 + UICalendarPanel.HEIGHT, UICalendarPanel.START_X, y1 + UICalendarPanel.HEIGHT);
- g.drawLine(UICalendarPanel.START_X, y1, UICalendarPanel.START_X, y1 + UICalendarPanel.HEIGHT);
- } else if (index % 7 == 6) {
- int y1 = index / 7 * UICalendarPanel.HEIGHT;
- g.drawLine(scale(185), y1, scale(216), y1);
- g.drawLine(scale(185), y1 + UICalendarPanel.HEIGHT, scale(216), y1 + UICalendarPanel.HEIGHT);
- g.drawLine(scale(185), y1, scale(185), y1 + UICalendarPanel.HEIGHT);
- } else {
- int x1 = index % 7 * UICalendarPanel.WIDTH - 1;
- int y1 = index / 7 * UICalendarPanel.HEIGHT;
- g.drawRect(x1, y1, UICalendarPanel.WIDTH, UICalendarPanel.HEIGHT);
- }
- }
-
public void setFloatIndex(int index) {
this.floateIndex = index;
repaint();
}
public void setSelectedIndex(int index) {
- if (this.selectedIndex != -1 && this.selectedIndex < getComponentCount()) {
- this.getComponent(selectedIndex).setForeground(Color.black);
- }
- if (index != -1 && index < getComponentCount()) {
- this.getComponent(index).setForeground(Color.WHITE);
- }
this.selectedIndex = index;
repaint();
}
@@ -725,17 +509,13 @@ public class UICalendarPanel extends JPanel {
private class HMSPane extends JPanel {
private boolean isRolOver;
- private UIButton preButton;
- private UIButton nextButton;
private CalendarNumberField hField;
private CalendarNumberField mField;
private CalendarNumberField sField;
- private CalendarNumberField selectedNumberField;
public HMSPane() {
- this.setPreferredSize(scale(new Dimension(101, 18)));
this.setLayout(new BorderLayout(0, 0));
- this.setBackground(null);
+ this.setOpaque(false);
initComponents();
initListener();
@@ -757,49 +537,68 @@ public class UICalendarPanel extends JPanel {
}
private void initComponents() {
- JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 2));
- jp.setBackground(null);
- jp.setBorder(null);
-
hField = new CalendarNumberField(23);
mField = new CalendarNumberField(59);
sField = new CalendarNumberField(59);
- selectedNumberField = hField;
+ this.add(row(cell(combineFieldArrowPane(hField)), cell(createGapLabel()), cell(combineFieldArrowPane(mField)),
+ cell(createGapLabel()), cell(combineFieldArrowPane(sField)), fix(4)).getComponent(), BorderLayout.CENTER);
+ }
+
+ private JPanel combineFieldArrowPane(CalendarNumberField field) {
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setOpaque(false);
+ Insets insets = FineUIUtils.getUIInsets("InputTextField.borderInsets", defaultInsets);
+ field.setBorder(new ScaledEmptyBorder(insets.top, insets.left, insets.bottom, insets.right));
+ UIButton preButton = createArrowButton(new LazyIcon("up_arrow", ICON_WIDTH));
+ UIButton nextButton = createArrowButton(new LazyIcon("down_arrow", ICON_WIDTH));
+ JPanel arrowPane = createArrowPane(preButton, nextButton);
+ panel.add(field, BorderLayout.CENTER);
+ panel.add(arrowPane, BorderLayout.EAST);
+ panel.setBorder(new FineRoundBorder());
- jp.add(hField);
- jp.add(createGapLabel());
- jp.add(mField);
- jp.add(createGapLabel());
- jp.add(sField);
+ nextButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ field.setValue(field.getIntValue() - 1);
+ field.requestFocus();
+ field.selectAll();
- this.add(jp, BorderLayout.CENTER);
- preButton = new UIButton(UIConstants.ARROW_UP_ICON) {
- public boolean shouldResponseChangeListener() {
- return false;
}
- };
- preButton.setRoundBorder(true, Constants.LEFT);
- nextButton = new UIButton(UIConstants.ARROW_DOWN_ICON) {
- public boolean shouldResponseChangeListener() {
- return false;
+ });
+ preButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ field.setValue(field.getIntValue() + 1);
+ field.requestFocus();
+ field.selectAll();
}
- };
- nextButton.setRoundBorder(true, Constants.LEFT);
+ });
+ return panel;
+ }
+
+ private JPanel createArrowPane(UIButton preButton, UIButton nextButton) {
JPanel arrowPane = new JPanel();
- arrowPane.setPreferredSize(scale(new Dimension(11, 18)));
+ arrowPane.setPreferredSize(createScaleDimension(12, 24));
arrowPane.setLayout(new GridLayout(2, 1));
arrowPane.add(preButton);
arrowPane.add(nextButton);
- this.add(arrowPane, BorderLayout.EAST);
+ arrowPane.setOpaque(false);
+ return arrowPane;
}
- private void initListener() {
- MouseAdapter backgroundAdapter = new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- HMSPane.this.selectedNumberField = (CalendarNumberField) e.getComponent();
+ private UIButton createArrowButton(Icon icon) {
+ UIButton arrowButton = new UIButton(icon) {
+ public boolean shouldResponseChangeListener() {
+ return false;
}
+ };
+ setStyle(arrowButton, STYLE_TEXT);
+ return arrowButton;
+ }
+
+ private void initListener() {
+ MouseAdapter backgroundAdapter = new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
isRolOver = false;
@@ -815,32 +614,10 @@ public class UICalendarPanel extends JPanel {
hField.addMouseListener(backgroundAdapter);
mField.addMouseListener(backgroundAdapter);
sField.addMouseListener(backgroundAdapter);
- nextButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- HMSPane.this.selectedNumberField.setValue(HMSPane.this.selectedNumberField.getIntValue() - 1);
- HMSPane.this.selectedNumberField.requestFocus();
- HMSPane.this.selectedNumberField.selectAll();
-
- }
- });
- preButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- HMSPane.this.selectedNumberField.setValue(HMSPane.this.selectedNumberField.getIntValue() + 1);
- HMSPane.this.selectedNumberField.requestFocus();
- HMSPane.this.selectedNumberField.selectAll();
- }
- });
}
- private UILabel createGapLabel() {
- UILabel uiLabel = new UILabel(":");
- uiLabel.setHorizontalAlignment(SwingConstants.CENTER);
- uiLabel.setBackground(null);
- uiLabel.setBorder(null);
- uiLabel.setPreferredSize(scale(new Dimension(6, 10)));
- return uiLabel;
+ private JPanel createGapLabel() {
+ return row(fix(4), cell(new UILabel(":")), fix(4)).getComponent();
}
public Insets getInsets() {
@@ -849,17 +626,6 @@ public class UICalendarPanel extends JPanel {
public void paint(Graphics g) {
super.paint(g);
- paintBorder(g);
- }
-
- public void paintBorder(Graphics g) {
- Graphics2D g2d = (Graphics2D) g;
- if (isRolOver) {
- Shape shape = new RoundRectangle2D.Double(1, 1, 86, 15, UIConstants.ARC, UIConstants.ARC);
- GUIPaintUtils.paintBorderShadow(g2d, 3, shape, UIConstants.HOVER_BLUE, Color.WHITE);
- } else {
- GUIPaintUtils.drawBorder(g2d, 0, 0, 101, 18, true, 3);
- }
}
public void populate(Calendar calendar) {
@@ -875,21 +641,8 @@ public class UICalendarPanel extends JPanel {
}
}
- public static void main(String[] args) {
- JFrame frame = new JFrame();
- UICalendarPanel calendarPanel = new UICalendarPanel();
- final UITextField field = new UITextField();
- field.setPreferredSize(new Dimension(120, 25));
- calendarPanel.addDateChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent e) {
- Date selectedDate = (Date) e.getSource();
- SimpleDateFormat f = new SimpleDateFormat("yyyy/MM/dd");
- field.setText(f.format(selectedDate));
- }
- });
- frame.getContentPane().setLayout(FRGUIPaneFactory.createCenterFlowLayout());
- frame.getContentPane().add(field);
- frame.getContentPane().add(calendarPanel);
- frame.setVisible(true);
+ @Override
+ public String getUIClassID() {
+ return UI_CLASS_ID;
}
}
diff --git a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java
index c37f5e88cd..eddf8945b2 100644
--- a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java
+++ b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java
@@ -235,9 +235,6 @@ public class UIDatePicker extends UIComboBox implements Serializable {
if (willHide || UIDatePicker.this.isEnabled() == false) {
return;
}
- if (calendarPanel != null) {
- calendarPanel.resetHMSPaneSelectedNumberField();
- }
super.show();
}
diff --git a/designer-base/src/main/java/com/fr/design/gui/date/UIDayLabel.java b/designer-base/src/main/java/com/fr/design/gui/date/UIDayLabel.java
index f7accce9e9..794b9f3cd0 100644
--- a/designer-base/src/main/java/com/fr/design/gui/date/UIDayLabel.java
+++ b/designer-base/src/main/java/com/fr/design/gui/date/UIDayLabel.java
@@ -1,18 +1,48 @@
package com.fr.design.gui.date;
import com.fr.design.gui.ilable.UILabel;
-import com.fr.design.utils.DesignUtils;
-import java.awt.Dimension;
import java.text.SimpleDateFormat;
import java.util.Date;
-import static com.fine.theme.utils.FineUIScale.scale;
-
+/**
+ * 日期控件,day label
+ *
+ * @author lemon
+ * @since 12.0
+ * Created on 2024/09/22
+ */
public class UIDayLabel extends UILabel {
+ private static final String UI_CLASS_ID = "DayLabelUI";
private Date date = null;
+ private int index;
+ private boolean pressed = false;
+ private boolean hovered = false;
+ private boolean selected = false;
+ private boolean currentMonth = false;
+ private boolean smallLabel = false;
+
+ public boolean isHovered() {
+ return hovered;
+ }
+
+ public boolean isPressed() {
+ return pressed;
+ }
+
+ public boolean isSelected() {
+ return selected;
+ }
+
+ public boolean isCurrentMonth() {
+ return currentMonth;
+ }
+
+ public boolean isSmallLabel() {
+ return smallLabel;
+ }
/**
* 日期格式(TODAY/TIP用)
@@ -28,11 +58,11 @@ public class UIDayLabel extends UILabel {
}
public UIDayLabel(Date date, boolean isSmallLabel) {
+ setOpaque(false);
setHorizontalAlignment(UILabel.CENTER);
- setFont(DesignUtils.getDefaultGUIFont().applySize(scale(12)));
this.date = date;
- setPreferredSize(scale(new Dimension(30, 18)));
- if (isSmallLabel) {
+ this.smallLabel = isSmallLabel;
+ if (smallLabel) {
setText(dayFormat.format(date));
} else {
setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Today") + ":" + dateFormat.format(new Date()));
@@ -44,8 +74,38 @@ public class UIDayLabel extends UILabel {
return date;
}
+ public void setHovered(boolean hovered) {
+ this.hovered = hovered;
+ }
+
+ public void setPressed(boolean pressed) {
+ this.pressed = pressed;
+ }
+
+ public void setSelected(boolean selected) {
+ this.selected = selected;
+ }
+
+ public void setCurrentMonth(boolean currentMonth) {
+ this.currentMonth = currentMonth;
+ }
+
+
public void setDate(Date date) {
this.date = date;
}
+ public void setIndex(int i) {
+ this.index = i;
+ }
+
+ public int getIndex() {
+ return this.index;
+ }
+
+ @Override
+ public String getUIClassID() {
+ return UI_CLASS_ID;
+ }
+
}
\ No newline at end of file
diff --git a/designer-base/src/main/resources/com/fine/theme/icon/left_arrow.svg b/designer-base/src/main/resources/com/fine/theme/icon/left_arrow.svg
new file mode 100644
index 0000000000..ee9347f2e6
--- /dev/null
+++ b/designer-base/src/main/resources/com/fine/theme/icon/left_arrow.svg
@@ -0,0 +1,3 @@
+
diff --git a/designer-base/src/main/resources/com/fine/theme/icon/right_arrow.svg b/designer-base/src/main/resources/com/fine/theme/icon/right_arrow.svg
new file mode 100644
index 0000000000..64b0c896d9
--- /dev/null
+++ b/designer-base/src/main/resources/com/fine/theme/icon/right_arrow.svg
@@ -0,0 +1,3 @@
+
diff --git a/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json b/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json
index 1aac4235da..3d09c571bf 100644
--- a/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json
+++ b/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json
@@ -29,6 +29,8 @@
"drag_right": "drag_right.svg",
"down_arrow": "down_arrow.svg",
"up_arrow": "up_arrow.svg",
+ "left_arrow": "left_arrow.svg",
+ "right_arrow": "right_arrow.svg",
"select": "select.svg",
"recycle": "recycle.svg",
"time": "time.svg",
diff --git a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLaf.properties b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLaf.properties
index 165701c244..0f74d6f6fb 100644
--- a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLaf.properties
+++ b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLaf.properties
@@ -7,6 +7,8 @@ ColorChooserUI=com.formdev.flatlaf.ui.FlatColorChooserUI
ComboBoxUI=com.fine.theme.light.ui.FineComboBoxUI
DesktopIconUI=com.formdev.flatlaf.ui.FlatDesktopIconUI
DesktopPaneUI=com.formdev.flatlaf.ui.FlatDesktopPaneUI
+CalendarPaneUI=com.fine.theme.light.ui.FineCalendarPaneUI
+DayLabelUI=com.fine.theme.light.ui.FineDayLabelUI
EditorPaneUI=com.formdev.flatlaf.ui.FlatEditorPaneUI
FileChooserUI=com.formdev.flatlaf.ui.FlatFileChooserUI
FormattedTextFieldUI=com.formdev.flatlaf.ui.FlatFormattedTextFieldUI
diff --git a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties
index c58cfad65c..644c474ba0 100644
--- a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties
+++ b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties
@@ -410,6 +410,14 @@ Label.strongHintColor = #FF0000
Label.warningColor = #F1393C
Label.secondaryColor = #0A1C38A8
+# ---- Calendar ----
+Calendar.background = $fill.normal
+Calendar.day.selectedBackground = #2576EF
+Calendar.day.hoverBackground = #E6E9EF
+Calendar.day.pressedBackground = #DADEE7
+Calendar.dayOtherMonth.foreground = fade(@foreground, 29%)
+Calendar.day.arc = 6
+
#---- HelpButton ----
HelpButton.questionMarkColor = @accentCheckmarkColor
@@ -1401,8 +1409,16 @@ chart.selectedBorderColor = #2576EF
background: $fill.normal
[style]Button.originalButton = \
- border: 4,4,4,4; \
- background: null;
+ borderColor: null; \
+ background: $fill.normal; \
+ hoverBorderColor: null;
+
+[style]Button.grayButton = \
+ foreground: fade(@foreground, 29%); \
+ borderColor: null; \
+ background: $fill.normal; \
+ hoverBorderColor: null;
+
[style]Label.detailLabel = \
foreground: fade(@foreground, 90%); \
diff --git a/designer-base/src/test/java/com/fr/design/gui/storybook/components/UICalendarPaneStoryBoard.java b/designer-base/src/test/java/com/fr/design/gui/storybook/components/UICalendarPaneStoryBoard.java
new file mode 100644
index 0000000000..072b8e2eec
--- /dev/null
+++ b/designer-base/src/test/java/com/fr/design/gui/storybook/components/UICalendarPaneStoryBoard.java
@@ -0,0 +1,32 @@
+package com.fr.design.gui.storybook.components;
+
+import com.fine.theme.light.ui.FineRoundBorder;
+import com.fr.design.gui.date.UICalendarPanel;
+import com.fr.design.gui.date.UIDatePicker;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.gui.storybook.StoryBoard;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Date;
+
+import static com.fine.swing.ui.layout.Layouts.*;
+
+public class UICalendarPaneStoryBoard extends StoryBoard {
+ public UICalendarPaneStoryBoard() {
+ super("日期控件");
+ UICalendarPanel calendarPanel = new UICalendarPanel(true);
+ calendarPanel.setSelectedDate(new Date());
+ add(
+ cell(new UILabel("日期下拉框")).with(this::h3),
+ row(cell(new UIDatePicker(2)).with(this::setFixSize), flex()),
+ cell(new UILabel("日期")).with(this::h3),
+ row(cell(calendarPanel), flex())
+ );
+ }
+
+ private void setFixSize(JComponent component) {
+ component.setPreferredSize(new Dimension(240, component.getHeight()));
+ component.setBorder(new FineRoundBorder());
+ }
+}