⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendardialog.java

📁 数码照片管理程序是我们公司在开发过程中的用java编写的模块
💻 JAVA
字号:
package com.mwq.album.calendar;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;
import javax.swing.table.JTableHeader;

public class CalendarDialog extends JDialog {

    public static void main(String args[]) {
        try {
            CalendarDialog dialog = new CalendarDialog();
            dialog.addWindowListener(new WindowAdapter() {

                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
            dialog.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private static final int YEAR;
    private static final int MONTH;
    private static final int DAY;
    private static int year;
    private static int month;
    private static final int[] daysOfMonth = {0, 31, 28, 31, 30, 31, 30, 31,
        31, 30, 31, 30, 31
    };
    private JTextField yearTextField;
    private JTextField monthTextField;
    private MTableModel tableModel;
    private JTable table;
    

    static {
        Calendar today = Calendar.getInstance();
        YEAR = year = today.get(Calendar.YEAR);
        MONTH = month = today.get(Calendar.MONTH) + 1;
        DAY = today.get(Calendar.DAY_OF_MONTH);
        judgeLeapYear();
    }

    public CalendarDialog() {
        super();
        setModal(true);
        setTitle("万年历");
        setResizable(false);

        // 无标题栏
        setUndecorated(true);
        setBounds(100, 100, 268, 219);

        // 有标题栏
//		setBounds(100, 100, 274, 251);

        final JPanel borderPanel = new JPanel();
        borderPanel.setBorder(new TitledBorder(null, "",
                TitledBorder.DEFAULT_JUSTIFICATION,
                TitledBorder.DEFAULT_POSITION, null, null));
        borderPanel.setLayout(new BorderLayout());
        getContentPane().add(borderPanel, BorderLayout.CENTER);

        final JPanel operatePanel = new JPanel();
        borderPanel.add(operatePanel, BorderLayout.NORTH);

        final JButton subYearButton = new JButton();
        subYearButton.setText("<<");
        subYearButton.setMargin(new Insets(0, 5, 0, 5));
        subYearButton.addActionListener(new SubYearButtonAL());
        operatePanel.add(subYearButton);

        final JButton subMonthButton = new JButton();
        subMonthButton.setText("<");
        subMonthButton.setMargin(new Insets(0, 8, 0, 8));
        subMonthButton.addActionListener(new SubMonthButtonAL());
        operatePanel.add(subMonthButton);

        yearTextField = new JTextField();
        yearTextField.setColumns(4);
        yearTextField.setText(year + "");
        yearTextField.setFont(new Font("", Font.BOLD, 12));
        yearTextField.setHorizontalAlignment(SwingConstants.CENTER);
        yearTextField.addFocusListener(new YearTextFieldFL());
        yearTextField.addKeyListener(new YearTextFieldKL());
        operatePanel.add(yearTextField);

        final JLabel yearLabel = new JLabel();
        yearLabel.setText("年");
        operatePanel.add(yearLabel);

        monthTextField = new JTextField();
        monthTextField.setColumns(2);
        monthTextField.setText(month + "");
        monthTextField.setFont(new Font("", Font.BOLD, 12));
        monthTextField.setHorizontalAlignment(SwingConstants.CENTER);
        monthTextField.addFocusListener(new MonthTextFieldFL());
        monthTextField.addKeyListener(new MonthTextFieldKL());
        operatePanel.add(monthTextField);

        final JLabel monthLabel = new JLabel();
        monthLabel.setText("月");
        operatePanel.add(monthLabel);

        final JButton addMonthButton = new JButton();
        addMonthButton.setText(">");
        addMonthButton.setMargin(new Insets(0, 8, 0, 8));
        addMonthButton.addActionListener(new AddMonthButtonAL());
        operatePanel.add(addMonthButton);

        final JButton addYearButton = new JButton();
        addYearButton.setText(">>");
        addYearButton.setMargin(new Insets(0, 5, 0, 5));
        addYearButton.addActionListener(new AddYearButtonAL());
        operatePanel.add(addYearButton);

        final JScrollPane scrollPane = new JScrollPane();
        borderPanel.add(scrollPane, BorderLayout.CENTER);

        String[] columnNames = {"一", "二", "三", "四", "五", "六", "日"};
        Object[][] tableDatas = new Object[6][7];

        tableModel = new MTableModel(columnNames, tableDatas);

        table = new JTable(tableModel);
        table.setRowHeight(24);
        table.setRowSelectionAllowed(false);
        table.setDefaultRenderer(JButton.class, new MTableCell());
        JTableHeader tableHeader = table.getTableHeader();
        tableHeader.setFont(new Font("", Font.BOLD, 12));
        scrollPane.setViewportView(table);

        final JPanel todayPanel = new JPanel();
        borderPanel.add(todayPanel, BorderLayout.SOUTH);

        final JLabel todayLabel = new JLabel();
        todayLabel.setText("今天是:" + YEAR + "-" + MONTH + "-" + DAY + "  ");
        todayPanel.add(todayLabel);
        final JButton todayButton = new JButton();
        todayButton.setText(". . .");
        todayButton.setMargin(new Insets(0, 3, 0, 3));
        todayButton.addActionListener(new TodayButtonAL());
        todayPanel.add(todayButton);
        //
        initTableModel();
    }

    private void initTableModel() {
        int row = 0;
        int col = 0;
        MButton button = null;
        // 上一月
        DateFormat dateFormat = DateFormat.getDateInstance();
        try {
            dateFormat.parse(year + "-" + month + "-1");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar firstDayOfMonth = dateFormat.getCalendar();
        int dayOfWeek = firstDayOfMonth.get(Calendar.DAY_OF_WEEK) - 1;
        if (dayOfWeek == 0) {
            dayOfWeek = 7;
        }
        int lastMonthDays = 31;
        if (month > 2) {
            lastMonthDays = daysOfMonth[month - 1];
        }
        for (int day = lastMonthDays - dayOfWeek + 2; day <= lastMonthDays; day++) {
            button = new MButton(day);
            button.setEnabled(false);
            tableModel.setValueAt(button, row, col);
            if (col == 6) {
                row++;
                col = 0;
            } else {
                col++;
            }
        }
        // 当月
        for (int day = 1; day <= daysOfMonth[month]; day++) {
            button = new MButton(day);
            if (col > 4) {
                if (col == 5) {
                    button.setForeground(Color.GREEN);
                } else {
                    button.setForeground(Color.RED);
                }
            }
            if (day == DAY) {
                if (year == YEAR && month == MONTH) {
                    button.setForeground(Color.ORANGE);
                }
            }
            tableModel.setValueAt(button, row, col);
            if (col == 6) {
                row++;
                col = 0;
            } else {
                col++;
            }
        }
        // 下一月
        int nextMonthDays = 42 - (row * 7 + col);
        for (int day = 1; day <= nextMonthDays; day++) {
            button = new MButton(day);
            button.setEnabled(false);
            tableModel.setValueAt(button, row, col);
            if (col == 6) {
                row++;
                col = 0;
            } else {
                col++;
            }
        }
    }

    private class SubYearButtonAL implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            yearTextField.setText(--year + "");
            judgeLeapYear();
            initTableModel();
            SwingUtilities.updateComponentTreeUI(table);
        }
    }

    private class AddYearButtonAL implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            yearTextField.setText(++year + "");
            judgeLeapYear();
            initTableModel();
            SwingUtilities.updateComponentTreeUI(table);
        }
    }

    private class SubMonthButtonAL implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (month == 1) {
                yearTextField.setText(--year + "");
                judgeLeapYear();
                month = 12;
            } else {
                month--;
            }
            monthTextField.setText(month + "");
            initTableModel();
            SwingUtilities.updateComponentTreeUI(table);
        }
    }

    private class AddMonthButtonAL implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (month == 12) {
                yearTextField.setText(++year + "");
                judgeLeapYear();
                month = 1;
            } else {
                month++;
            }
            monthTextField.setText(month + "");
            initTableModel();
            SwingUtilities.updateComponentTreeUI(table);
        }
    }

    private class YearTextFieldFL implements FocusListener {

        public void focusGained(FocusEvent e) {
            yearTextField.setText(null);
        }

        public void focusLost(FocusEvent e) {
            if (yearTextField.getText().length() == 0) {
                yearTextField.setText(year + "");
            }
        }
    }

    private class YearTextFieldKL extends KeyAdapter {

        public void keyTyped(KeyEvent e) {
            int digit = yearTextField.getText().length();
            if (digit < 4) {
                String num = (digit == 0 ? "123456789" : "0123456789");
                if (num.indexOf(e.getKeyChar()) < 0) {
                    e.consume();
                }
            } else {
                e.consume();
            }
        }

        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                year = Integer.valueOf(yearTextField.getText());
                judgeLeapYear();
                initTableModel();
                SwingUtilities.updateComponentTreeUI(table);
            }
        }
    }

    private class MonthTextFieldFL implements FocusListener {

        public void focusGained(FocusEvent e) {
            monthTextField.setText(null);
        }

        public void focusLost(FocusEvent e) {
            if (monthTextField.getText().length() == 0) {
                monthTextField.setText(month + "");
            }
        }
    }

    private class MonthTextFieldKL extends KeyAdapter {

        public void keyTyped(KeyEvent e) {
            String input = monthTextField.getText();
            switch (input.length()) {
                case 0:
                    if ("123456789".indexOf(e.getKeyChar()) < 0) {
                        e.consume();
                    }
                    break;
                case 1:
                    if (input.equals("1")) {
                        if ("012".indexOf(e.getKeyChar()) < 0) {
                            e.consume();
                        }
                    } else {
                        e.consume();
                    }
                    break;
                default:
                    e.consume();
            }
        }

        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                month = Integer.valueOf(monthTextField.getText());
                initTableModel();
                SwingUtilities.updateComponentTreeUI(table);
            }
        }
    }

    private class TodayButtonAL implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            year = YEAR;
            month = MONTH;
            yearTextField.setText(year + "");
            monthTextField.setText(month + "");
            judgeLeapYear();
            initTableModel();
            SwingUtilities.updateComponentTreeUI(table);
        }
    }

    public static void judgeLeapYear() {
        if (year % 100 == 0) {
            daysOfMonth[2] = (year % 400 == 0 ? 29 : 28);
        } else {
            daysOfMonth[2] = (year % 4 == 0 ? 29 : 28);
        }
    }

    public static int getYear() {
        return year;
    }

    public static int getMonth() {
        return month;
    }

    public static int getYEAR() {
        return YEAR;
    }

    public static int getMONTH() {
        return MONTH;
    }

    public static int getDAY() {
        return DAY;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -