2009-01-22 78 views
12

是否有人对Java Swing应用程序中使用的日期选择器(下拉日历或小日历组件)有任何建议 - bean或源代码?他们需要足够强大的商业应用。Java日期和日历控件

回答

8

JCalendar是免费的,并提供豆类和源代码。它是相当可配置的,并且在我的应用程序中,迄今为止它的目的非常好。

7

尝试swinglabs。有很多比日期选择器...享受。

1

我同意Dan Dimerman,可以推荐swingX库。我们在商业应用中也使用JXDatePicker。与JXMonthView你有可能编写你自己的日期选择器的变体。

1

你可以使用这个只是改变了主您的需求^^

import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.GridLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    import javax.swing.JButton; 
    import javax.swing.JDialog; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.JTextField; 

    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]; 

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"); 
     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"); 
} 

public String setPickedDate() { 
     if (day.equals("")) 
       return day; 
     java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
         "dd-MM-yyyy"); 
     java.util.Calendar cal = java.util.Calendar.getInstance(); 
     cal.set(year, month, Integer.parseInt(day)); 
     return sdf.format(cal.getTime()); 
} 
} 

    class Picker { 
public static void main(String[] args) { 
     JLabel label = new JLabel("Selected Date:"); 
     final JTextField text = new JTextField(20); 
     JButton b = new JButton("popup"); 
     JPanel p = new JPanel(); 
     p.add(label); 
     p.add(text); 
     p.add(b); 
     final JFrame f = new JFrame(); 
     f.getContentPane().add(p); 
     f.pack(); 
     f.setVisible(true); 
     b.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent ae) { 
         text.setText(new DatePicker(f).setPickedDate()); 
       } 
     }); 
} 

    }