首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用JComboBox制作日历?

使用JComboBox制作日历可以通过以下步骤实现:

  1. 创建一个JComboBox对象,用于选择年份。
  2. 创建一个JComboBox对象,用于选择月份。
  3. 创建一个JPanel对象,用于容纳日历的显示。
  4. 在JPanel中创建一个JTable对象,用于显示日期。
  5. 创建一个DefaultTableModel对象,用于设置JTable的数据模型。
  6. 根据选择的年份和月份,计算出该月的天数。
  7. 将日期数据填充到DefaultTableModel中。
  8. 将DefaultTableModel设置为JTable的数据模型。
  9. 将JTable添加到JPanel中。
  10. 将JPanel添加到主界面中。

以下是一个示例代码,演示如何使用JComboBox制作日历:

代码语言:txt
复制
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.YearMonth;

public class CalendarApp extends JFrame {
    private JComboBox<Integer> yearComboBox;
    private JComboBox<String> monthComboBox;
    private JPanel calendarPanel;
    private JTable calendarTable;

    public CalendarApp() {
        setTitle("Calendar App");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // 创建年份选择的JComboBox
        yearComboBox = new JComboBox<>();
        int currentYear = YearMonth.now().getYear();
        for (int year = currentYear - 10; year <= currentYear + 10; year++) {
            yearComboBox.addItem(year);
        }

        // 创建月份选择的JComboBox
        monthComboBox = new JComboBox<>();
        String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
        for (String month : months) {
            monthComboBox.addItem(month);
        }

        // 创建日历显示的JPanel
        calendarPanel = new JPanel(new BorderLayout());

        // 添加年份和月份选择的JComboBox到主界面
        JPanel selectionPanel = new JPanel();
        selectionPanel.add(yearComboBox);
        selectionPanel.add(monthComboBox);
        add(selectionPanel, BorderLayout.NORTH);

        // 添加日历显示的JPanel到主界面
        add(calendarPanel, BorderLayout.CENTER);

        // 监听年份和月份选择的JComboBox的选择事件
        yearComboBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                updateCalendar();
            }
        });

        monthComboBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                updateCalendar();
            }
        });

        // 初始化日历显示
        updateCalendar();

        pack();
        setVisible(true);
    }

    private void updateCalendar() {
        int year = (int) yearComboBox.getSelectedItem();
        int month = monthComboBox.getSelectedIndex() + 1;
        YearMonth yearMonth = YearMonth.of(year, month);
        int daysInMonth = yearMonth.lengthOfMonth();

        // 创建日期数据
        Object[][] data = new Object[6][7];
        int day = 1;
        for (int row = 0; row < 6; row++) {
            for (int col = 0; col < 7; col++) {
                if (row == 0 && col < yearMonth.atDay(1).getDayOfWeek().getValue() % 7) {
                    data[row][col] = "";
                } else if (day > daysInMonth) {
                    data[row][col] = "";
                } else {
                    data[row][col] = day;
                    day++;
                }
            }
        }

        // 创建数据模型
        DefaultTableModel model = new DefaultTableModel(data, new String[]{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"});

        // 创建日历表格
        calendarTable = new JTable(model);
        calendarTable.setRowHeight(30);
        calendarTable.setDefaultRenderer(Object.class, new CalendarCellRenderer());

        // 更新日历显示的JPanel
        calendarPanel.removeAll();
        calendarPanel.add(new JScrollPane(calendarTable), BorderLayout.CENTER);
        calendarPanel.revalidate();
        calendarPanel.repaint();
    }

    private class CalendarCellRenderer extends DefaultTableCellRenderer {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

            if (value != null) {
                int day = (int) value;
                if (day == YearMonth.now().getDayOfMonth()) {
                    setForeground(Color.RED);
                } else {
                    setForeground(Color.BLACK);
                }
            }

            return this;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new CalendarApp();
            }
        });
    }
}

这个示例代码使用了Java Swing库来创建一个简单的日历应用程序。它使用了JComboBox来选择年份和月份,使用JTable来显示日期。通过监听年份和月份选择的JComboBox的选择事件,动态更新日历显示。在日历表格中,当前日期会以红色字体显示。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2分15秒

如何使用热区制作Hover效果?

1分44秒

如何使用动态面板制作轮播效果?

3分54秒

PS使用教程:如何在Mac版Photoshop中制作烟花效果?

4分46秒

使用vue制作todolist!

22.2K
1分6秒

PS使用教程:如何在Mac版Photoshop中制作“3D”立体文字?

1分34秒

如何制作一款app小程序

2分2秒

如何制作二维码分享给别人

13分28秒

day21_常用类/13-尚硅谷-Java语言高级-Calendar日历类的使用

13分28秒

day21_常用类/13-尚硅谷-Java语言高级-Calendar日历类的使用

13分28秒

day21_常用类/13-尚硅谷-Java语言高级-Calendar日历类的使用

1分18秒

如何在 Adob​​e Photoshop 中制作多重曝光图像?

1分10秒

PS小白教程:如何在Photoshop中制作透明玻璃效果?

领券