Hi guys, I'm working on a java swing calendar and I want to set different colour for current(today) date, here is what I have tried so far and its seems to be fine:
import java.awt.*; import java.awt.event.*; import java.text.SimpleDateFormat; import java.util.*; import javax.swing.*; public class DatePicker { int month = java.util.Calendar.getInstance().get(java.util.Calendar.MONTH); int year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);; JLabel l = new JLabel("", JLabel.CENTER); String day = ""; JDialog d; JButton[] button = new JButton[49]; /** * Create a calendar to select a date. * */ 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); } /** * Display the dates * * @return void */ public void displayDate() { for (int x = 7; x < button.length; x++) button[x].setText(""); java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat( "MMMM yyyy"); java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(year, month, 1); int dayOfWeek = cal.get(java.util.Calendar.DAY_OF_WEEK); int daysInMonth = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH); for (int x = 6 + dayOfWeek, day = 1; day <= daysInMonth; x++, day++) { button[x].setText("" + day); l.setText(sdf.format(cal.getTime())); d.setTitle("Date Picker"); String str =button[x].getText(); SimpleDateFormat format = new SimpleDateFormat("dd"); String timenow = format.format(new Date()); SimpleDateFormat df = new SimpleDateFormat("MMMM yyyy"); String month = df.format(new Date()); System.out.println(str); System.out.println(l.getText()); if(l.getText().equals(month) &&(str.equals(timenow))) button[x].setForeground(Color.RED); } } /** * Set the selected date to the plan area. * * @return a String of date and time */ public String setPickedDate() { if (day.equals("")) return day; java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat( " dd/MM/yyyy hh:mm"); java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(year, month, Integer.parseInt(day)); return sdf.format(cal.getTime()); } }
The code I used to set the colour is in the displayDate() method. It worked for this month as the date today(21 January) is set to red. However went I go to next month the 18th of February is red as well and I have absolutely no idea why is that. I have been struggle for so long and I decided to post it here and hope some of you can find what I have done wrong.
Any comment is appreciated.