【问题标题】:Highlight just the current date in the month on datepicker in java在java中的datepicker上仅突出显示月份中的当前日期
【发布时间】:2014-11-20 04:35:00
【问题描述】:

我有一个日期选择器程序,它允许我选择日期。我只想突出显示当前月份和当年的当前日期。所有其他不突出显示。我有显示一个月日期的按钮。我能够突出显示当前月份和当年的当前日期,但是在所有年份的所有月份中都突出显示相同的单元格。我怎样才能避免这种情况?

import java.util.*;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

import java.awt.Component;
import java.awt.event.*;
import java.awt.*;
import java.awt.Toolkit;
import java.awt.Component.*;
import java.awt.Graphics;
import java.awt.Cursor.*;

import java.text.*;

public class DatePicker
{
        int month = Calendar.getInstance().get(Calendar.MONTH);

        int year = Calendar.getInstance().get(Calendar.YEAR);

        JLabel l = new JLabel("", JLabel.CENTER);

        String day = "";

        JDialog d;

        JButton[] button = new JButton[49];

        public DatePicker(JFrame parent)
        {
                d = new JDialog();

                d.setModal(true);

                String[] header = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};

                JPanel p1 = new JPanel(new GridLayout(7, 7));

                p1.setPreferredSize(new Dimension(430, 120));

                for(int x = 0; x < button.length; x++)
                {
                        final int selection = x;

                        button[x] = new JButton();

                        button[x].setFocusPainted(false);
                        button[x].setBackground(Color.white);

                        if(x > 6)
                                button[x].addActionListener(new ActionListener()
                                {
                                        public void actionPerformed(ActionEvent ae)
                                        {
                                                day = button[selection].getActionCommand();

                                                d.dispose();
                                        }
                                });

                        if(x < 7)
                        {
                                button[x].setText(header[x]);
                                button[x].setForeground(Color.red);
                        }

                        p1.add(button[x]);
                }

                JPanel p2 = new JPanel(new GridLayout(1, 3));

                JButton previous = new JButton("<< Previous");

                previous.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent ae)
                        {
                                month--;

                                displayDate();
                        }
                });

                p2.add(previous);
                p2.add(l);

                JButton next = new JButton("Next >>");

                next.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent ae)
                        {
                                month++;

                                displayDate();
                        }
                });

                p2.add(next);

                d.add(p1, BorderLayout.CENTER);
                d.add(p2, BorderLayout.SOUTH);
                d.pack();
                d.setLocationRelativeTo(parent);

                displayDate();

                d.setVisible(true);
        }

        public void displayDate()
        {
                for(int x = 7; x < button.length; x++)
                        button[x].setText("");

                java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("MMMM yyyy");

                Calendar cal = Calendar.getInstance();
                cal.set(year, month, 1);

                int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
                int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

                Font font = new Font("Courier", Font.BOLD, 12);

                Calendar curr = new GregorianCalendar();

                 int currdate = curr.get(Calendar.DAY_OF_MONTH);
                 int currmon = curr.get(Calendar.MONTH);
                 int curryear = curr.get(Calendar.YEAR);

                 int date = cal.get(Calendar.DAY_OF_MONTH);
                 int mon = cal.get(Calendar.MONTH);
                 int year = cal.get(Calendar.YEAR);
                 int day1 = cal.get(Calendar.DAY_OF_WEEK);
                 int start = (7 - (date - day1) % 7) % 7;
                 int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

                 System.out.println("currdate : " + currdate);
                System.out.println("currmon : " + currmon);
                System.out.println("mon : " + mon);
                System.out.println("curryear : " + curryear);
                System.out.println("year : " + year);

                for(int x = 6 + dayOfWeek, day = 1; day <= daysInMonth; x++, day++)
                {
                        button[x].setText("" + day);

                        System.out.println("x : " + x);
                        System.out.println("day : " + day);

                        if(currdate == (x - 12) && currmon == mon && curryear == year)
                        {
                                // button[x].setFont(font);
                                 button[day].setBackground(Color.GREEN);
                        }

                        else
                                button[x].setBackground(Color.white);
                }

                // for(int i = 1; i <= days; i++)

                l.setText(sdf.format(cal.getTime()));
                d.setTitle("Date Picker");
        }

        public String setPickedDate()
        {
                if(day.equals(""))
                        return day;

                java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("MM-dd-yyyy");

                Calendar cal = Calendar.getInstance();

                cal.set(year, month, Integer.parseInt(day));
                return sdf.format(cal.getTime());
        }
}  

更新我的帖子

【问题讨论】:

    标签: java date datepicker


    【解决方案1】:

    您缺少 else 块:

    if(currdate == (x - 12) && currmon == mon && curryear == year) {
         button[x].setFont(font);
         button[x].setBackground(Color.GREEN);
    } else {
         button[x].setFont(?); //<-- replace ? with desired font
         button[x].setBackground(?); //<-- replace ? with desired color
    }
    

    【讨论】:

    • 嘿,真是个愚蠢的错误……我从来没想过。它现在工作得很好。感谢您的快速回复。我会接受答案。谢谢............ :)
    • 我无法突出显示一个月内的当前日期,它突出显示了不正确的日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多