如何在JCalendar中设置自定义星期开始?

0

我在JCalendar中设置自定义一周的第一天有麻烦。如果更改语言环境,则一周的第一天确实会更改。但是,更改基础日历中的第一周第一天没有任何效果。

这是一个简短的演示代码:

public class TestJChooser extends JFrame {

    /**
     *
     */
    public TestJChooser() {

        setLayout(new BorderLayout(5,5));
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        Locale locale = Locale.forLanguageTag("de-DE");

        Calendar calendar = Calendar.getInstance(locale);
        calendar.setFirstDayOfWeek(Calendar.TUESDAY);

        JCalendar jCal = new JCalendar(calendar);
        jCal.setLocale(locale);
        jCal.setPreferredSize(new Dimension(500, 400));
        jCal.getDayChooser().setDayBordersVisible(true);
        jCal.setTodayButtonVisible(true);
        getContentPane().add(jCal,BorderLayout.CENTER);

        pack();
        setVisible(true);

    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        new TestJChooser();

    }
}

改变的价值

   calendar.setFirstDayOfWeek(Calendar.TUESDAY);

不会更改JCalendar中一周的第一天,也不更改周末。

0

为了实现com.toedter.calendar.JDateChooser所需的功能,我必须对其进行扩展。

首先是一个演示:将星期日设置为一周的第一天(尽管区域设置将其设置为星期一)。测试班:

    public class TestJXChooser extends JFrame {

        /**
         *
         */
        public TestJXChooser(){

            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

            getContentPane().setLayout(new GridLayout(0, 1, 0, 0));
            getContentPane().setLayout(new BorderLayout(5,5));

            //set locale and calendar
            Locale locale = Locale.forLanguageTag("de-DE"); 

            Calendar cal = Calendar.getInstance(locale);
            cal.setTime(new Date());
            //set first day of week
            int firstWeekDay = Calendar.SUNDAY;
            cal.setFirstDayOfWeek(firstWeekDay);

            //-- Toedter JCalendar

            JCalendar jCalendar = new JCalendarExt(null, locale, true, true, false);
            jCalendar.setCalendar(cal);
            jCalendar.setPreferredSize(new Dimension(120, 160));
            jCalendar.getDayChooser().setDayBordersVisible(true);
            jCalendar.setTodayButtonVisible(true);
            jCalendar.setWeekOfYearVisible(false);

            getContentPane().add(jCalendar,BorderLayout.CENTER);

            //-- Toedter JDateChooser
            JCalendar jCalendar2 = new JCalendarExt(null, locale, true, true, false);
            jCalendar2.setCalendar(cal);
            JDateChooser dateChooser = new JDateChooser(jCalendar2, null , "dd.mm.yyyy",null);
            dateChooser.setLocale(locale);

            getContentPane().add(dateChooser,BorderLayout.SOUTH);

            pack();
            setVisible(true);

        }

        /**
         * @param args
         */
        public static void main(String[] args) {

            new TestJXChooser();

        }

    }

结果可以在图像中看到。

将星期日设置为一周的第一天
第二张图片演示了将一周的第一天设置为星期二。

将一周的第一天设置为星期二
扩大了两节课。扩展JCalendar的类:

    /**
     * Extended to gain control on week-first-day.
     * It also enables the option to display in different color the
     * last-day-of-week, rather than <code>JCalendar</code> default which is
     * always display Sunday in a different color.
     *
     * @version
     * $Log: JCalendarExt.java,v $
     *
     *
     * @author Ofer Yuval
     * 27 Nov 2015
     *
     */
    public class JCalendarExt extends JCalendar {

        /**
         *
         * @param date
         * @param locale
         * @param monthSpinner
         * @param weekOfYearVisible
         * @param colorWeekend
         *      <br>When false, week-first-day will be painted in red, as in  <code>JDayChooser</code>.
         *      <br>When true, week-last-day will be painted in red.
         */

        public JCalendarExt(Date date, Locale locale, boolean monthSpinner, boolean weekOfYearVisible,
                boolean colorWeekend) {

            super(date, locale, monthSpinner, weekOfYearVisible);

            remove(dayChooser);

            //add the extended date chooser
            dayChooser = new JDayChooserExt(weekOfYearVisible) ;
            dayChooser.addPropertyChangeListener(this);
            ((JDayChooserExt) dayChooser).setColorWeekend(colorWeekend);

            monthChooser.setDayChooser(dayChooser);
            yearChooser.setDayChooser(dayChooser);

            add(dayChooser, BorderLayout.CENTER);

        }

        @Override
        public void setCalendar(Calendar c) {

            getDayChooser().setCalendar(c);
            super.setCalendar(c);
        }

    }

以及扩展JDayChooser的类:

    /**
     *
     * @version
     * $Log: JDayChooserExt.java,v $
     *
     *
     * @author Ofer Yuval
     * 27 Nov 2015
     *
     */
    public class JDayChooserExt extends JDayChooser {

        /**
         * When false, week-first-day will be painted in red, as in  <code>JDayChooser</code>.
         * When true, week-last-day will be painted in red.
         */
        private boolean isColorWeekend = false;

        /**
         * @param weekOfYearVisible
         */
        public JDayChooserExt(boolean weekOfYearVisible) {

            super(weekOfYearVisible);
        }

        /**
         * Initializes the locale specific names for the days of the week.
         */
        @Override
        protected void init() {

            JButton testButton = new JButton();
            oldDayBackgroundColor = testButton.getBackground();
            selectedColor = new Color(160, 160, 160);
            drawDayNames();
            drawDays();

        }

        /**
         * Draws the day names of the day columns.
         */
        private void drawDayNames() {

            DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
            dayNames = dateFormatSymbols.getShortWeekdays();

            int Day = calendar.getFirstDayOfWeek();//firstDayOfWeek;

            int coloredDay = (isColorWeekend ) ?  Day -1 : Day;
            if(coloredDay <= 0) {
                coloredDay += 7;
            }


            for (int i = 0; i < 7; i++) {
                if ((maxDayCharacters > 0) && (maxDayCharacters < 5)) {
                    if (dayNames[Day].length() >= maxDayCharacters) {
                        dayNames[Day] = dayNames[Day]
                                .substring(0, maxDayCharacters);
                    }
                }

                days[i].setText(dayNames[Day]);

                if (Day == coloredDay) {
                    days[i].setForeground(sundayForeground);
                } else {
                    days[i].setForeground(weekdayForeground);
                }

                if (Day < 7) {
                    Day++;
                } else {
                    Day -= 6;
                }
            }
        }

        /**
         * @param isColorWeekend the isColorWeekend to set
         */
        public void setColorWeekend(boolean isColorWeekend) {
            this.isColorWeekend = isColorWeekend;
        }


        // ///////////////////////////////////////////////////////////
        // ////////////// DecoratorButton class //////////////////////
        // ///////////////////////////////////////////////////////////

        class DecoratorButton extends JButton {
            private static final long serialVersionUID = -5306477668406547496L;

            public DecoratorButton() {
                setBackground(decorationBackgroundColor);
                setContentAreaFilled(decorationBackgroundVisible);
                setBorderPainted(decorationBordersVisible);
            }

            @Override
            public void addMouseListener(MouseListener l) {
            }

            @Override
            public boolean isFocusable() {
                return false;
            }

            @Override
            public void paint(Graphics g) {
                if ("Windows".equals(UIManager.getLookAndFeel().getID())) {
                    // this is a hack to get the background painted
                    // when using Windows Look & Feel
                    if (decorationBackgroundVisible) {
                        g.setColor(decorationBackgroundColor);
                    } else {
                        g.setColor(days[7].getBackground());
                    }
                    g.fillRect(0, 0, getWidth(), getHeight());
                    if (isBorderPainted()) {
                        setContentAreaFilled(true);
                    } else {
                        setContentAreaFilled(false);
                    }
                }
                super.paint(g);
            }
        };
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在React Native中从“从现在开始”的自定义日期和时间中获取星期/天/小时/分钟之前?

来自分类常见问题

如何在排球请求中设置自定义标题

来自分类Dev

如何在图表中设置自定义填充颜色

来自分类Dev

如何在自定义WebViewPage中设置属性?

来自分类Dev

如何在Maven中设置JDK的自定义版本?

来自分类Dev

如何在CreateJs中设置自定义光标?

来自分类Dev

如何在自定义通知textview中设置值

来自分类Dev

如何在HTML中设置自定义tabindex

来自分类Dev

如何在Helmchart中设置自定义发布名称

来自分类Dev

如何在SwiftUI中设置自定义环境键?

来自分类Dev

如何在自定义HttpMessageHandler中设置属性?

来自分类Dev

如何在Flutter中设置自定义FontWeight值

来自分类Dev

Android如何在画布中设置自定义字体?

来自分类Dev

如何在Java中设置自定义光标?

来自分类Dev

如何在自定义WebViewPage中设置属性?

来自分类Dev

如何在CreateJs中设置自定义光标?

来自分类Dev

如何在Fragment(Android)中设置自定义ListView?

来自分类Dev

如何在Ubuntu中设置自定义时间?

来自分类Dev

如何在自定义通知textview中设置值

来自分类Dev

如何在 Leaflet 中创建自定义设置控件

来自分类Dev

如何在 amCharts 中设置自定义数据颜色

来自分类Dev

如何在codeigniter的自定义库中设置cookie?

来自分类Dev

如何在自定义对话框中设置自定义按钮?

来自分类Dev

如何在自定义tableviewcelll中设置标签的自定义字体?

来自分类Dev

如何在自定义对话框中设置自定义按钮?

来自分类Dev

如何在Spring MVC中开始支持自定义处理程序方法响应类型?

来自分类Dev

如何在Visual Studio中开始添加自定义文件?

来自分类Dev

当 panResponder 开始移动时,如何在父类中调用自定义函数?

来自分类Dev

如何在DaterangePicker中设置从星期五开始到下一个星期四结束的星期

Related 相关文章

  1. 1

    如何在React Native中从“从现在开始”的自定义日期和时间中获取星期/天/小时/分钟之前?

  2. 2

    如何在排球请求中设置自定义标题

  3. 3

    如何在图表中设置自定义填充颜色

  4. 4

    如何在自定义WebViewPage中设置属性?

  5. 5

    如何在Maven中设置JDK的自定义版本?

  6. 6

    如何在CreateJs中设置自定义光标?

  7. 7

    如何在自定义通知textview中设置值

  8. 8

    如何在HTML中设置自定义tabindex

  9. 9

    如何在Helmchart中设置自定义发布名称

  10. 10

    如何在SwiftUI中设置自定义环境键?

  11. 11

    如何在自定义HttpMessageHandler中设置属性?

  12. 12

    如何在Flutter中设置自定义FontWeight值

  13. 13

    Android如何在画布中设置自定义字体?

  14. 14

    如何在Java中设置自定义光标?

  15. 15

    如何在自定义WebViewPage中设置属性?

  16. 16

    如何在CreateJs中设置自定义光标?

  17. 17

    如何在Fragment(Android)中设置自定义ListView?

  18. 18

    如何在Ubuntu中设置自定义时间?

  19. 19

    如何在自定义通知textview中设置值

  20. 20

    如何在 Leaflet 中创建自定义设置控件

  21. 21

    如何在 amCharts 中设置自定义数据颜色

  22. 22

    如何在codeigniter的自定义库中设置cookie?

  23. 23

    如何在自定义对话框中设置自定义按钮?

  24. 24

    如何在自定义tableviewcelll中设置标签的自定义字体?

  25. 25

    如何在自定义对话框中设置自定义按钮?

  26. 26

    如何在Spring MVC中开始支持自定义处理程序方法响应类型?

  27. 27

    如何在Visual Studio中开始添加自定义文件?

  28. 28

    当 panResponder 开始移动时,如何在父类中调用自定义函数?

  29. 29

    如何在DaterangePicker中设置从星期五开始到下一个星期四结束的星期

热门标签

归档