【问题标题】:show the time in a combobox在组合框中显示时间
【发布时间】:2022-04-07 16:40:27
【问题描述】:

我正在尝试实现一个显示一天中每个小时的列表的组合框,但没有成功。它给了我“构造函数 JComboBox(JSpinner) 未定义”错误。有什么帮助吗?谢谢

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 24);
    calendar.set(Calendar.MINUTE, 0);
    SpinnerDateModel model = new SpinnerDateModel();
    model.setValue(calendar.getTime());
    JSpinner spinner = new JSpinner(model);
    departureTime = new JComboBox<String>(spinner);

【问题讨论】:

    标签: java swing combobox spinner


    【解决方案1】:

    不,这没有任何意义。您应该将组合框传递给ComboBoxModel,其中填充了您要显示的值

    请参阅How to use comboboxesHow to Use Spinners 了解更多详情

    您可以使用this 之类的东西,它使用JSpinner 来显示时间并允许用户对其进行操作

    或者您需要用您希望允许用户选择的值填充组合框,例如给定的时间间隔...

    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.GridBagLayout;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.DefaultListCellRenderer;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class Test {
    
        public static void main(String[] args) {
            new Test();
        }
    
        public Test() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                        ex.printStackTrace();
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(new TestPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            public TestPane() {
                setLayout(new GridBagLayout());
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, 0);
                calendar.set(Calendar.MINUTE, 0);
    
                Calendar end = Calendar.getInstance();
                end.set(Calendar.HOUR_OF_DAY, 23);
                end.set(Calendar.MINUTE, 59);
                DefaultComboBoxModel<Date> model = new DefaultComboBoxModel<>();
                do {
                    model.addElement(calendar.getTime());
                    calendar.add(Calendar.MINUTE, 15);
                } while (calendar.getTime().before(end.getTime()));
    
                JComboBox<Date> cb = new JComboBox<>(model);
                cb.setRenderer(new DateFormattedListCellRenderer(new SimpleDateFormat("HH:mm")));
    
                add(cb);
    
            }
    
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }
    
            public class DateFormattedListCellRenderer extends DefaultListCellRenderer {
    
                private DateFormat format;
    
                public DateFormattedListCellRenderer(DateFormat format) {
                    this.format = format;
                }
    
                @Override
                public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                    if (value instanceof Date) {
                        value = format.format((Date) value);
                    }
                    return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                }
    
            }
    
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      我不知道你想用日历做什么,但每天都有 24 小时,所以添加一个 24 小时的列表或创建一个最大值为 24 的微调器。

      【讨论】:

        猜你喜欢
        • 2016-08-04
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-07
        • 2015-11-22
        • 1970-01-01
        相关资源
        最近更新 更多