【问题标题】:JSpinner Date Editor in Buddhist Calendar佛教日历中的JSpinner日期编辑器
【发布时间】:2019-05-30 00:08:17
【问题描述】:

有没有办法将 JSpinner.DateEditor 与佛教日历一起使用?当我将语言环境更改为“th”、“TH”并重新创建我的日历时,它们确实是佛教日历。但是,JSpinners 没有更新。下面是一些示例代码:

Locale locale = new Locale("th", "TH");
Locale.setDefault(locale);
// Reinitializing calendars with new locale, this is done correctly
encodingCalendar = Calendar.getInstance();
expirationCalendar = Calendar.getInstance();
// Modifying the spinners in another class to update them with the correct locale
// this is the part that's not doing what I'd expect.
editor.getExpirationDateSpinner().setLocale(locale);
editor.getExpirationDateSpinner().getEditor().setLocale(locale);

有什么想法吗?

【问题讨论】:

    标签: java calendar jspinner


    【解决方案1】:

    尝试设置微调器的语言环境:

    import java.awt.EventQueue;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Locale;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JSpinner;
    import javax.swing.SpinnerDateModel;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    
    public class JSpinnerTest extends JPanel {
    
        public static void main(String args[]) {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JFrame f = new JFrame("JSpinnerTest");
                    f.add(new JSpinnerTest());
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.pack();
                    f.setVisible(true);
                }
            });
        }
    
        public JSpinnerTest() {
            final JLabel label = new JLabel();
            final JSpinner spinner = new JSpinner();
            spinner.setLocale(new Locale("th", "TH"));
            Calendar calendar = Calendar.getInstance();
            Date initDate = calendar.getTime();
            calendar.add(Calendar.YEAR, -5);
            Date earliestDate = calendar.getTime();
            calendar.add(Calendar.YEAR, 10);
            Date latestDate = calendar.getTime();
            spinner.setModel(new SpinnerDateModel(
                initDate, earliestDate, latestDate, Calendar.MONTH));
            spinner.setEditor(new JSpinner.DateEditor(spinner, "MMM yyyy"));
            spinner.addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {
                    JSpinner s = (JSpinner) e.getSource();
                    label.setText(s.getValue().toString());
                }
            });
            label.setText(initDate.toString());
            this.add(label);
            this.add(spinner);
        }
    }
    

    【讨论】:

    • 我已经尝试更新区域设置,正如我在示例代码中发布的那样。我尝试使用新的 javax.swing.SpinnerDateModel(expirationCalendar.getTime(), null, null, Calendar.MONTH) 重新创建 SpinnerDateModel,但这没有用。
    • 我相信你必须设置 spinner's 语言环境。我添加了一个 SSCCE 和屏幕截图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多