【问题标题】:Java date and calendar controlsJava 日期和日历控件
【发布时间】:2010-10-02 21:25:57
【问题描述】:

有没有人推荐在 Java Swing 应用程序中使用的好的日期选择器(下拉日历或小型日历组件)——bean 或源代码?它们需要足够强大以适应商业应用。

【问题讨论】:

    标签: java swing controls components javabeans


    【解决方案1】:

    JCalendar 是免费的,并提供 bean 和源代码。它是非常可配置的,并且到目前为止在我的应用程序中都很好地达到了它的目的。

    【讨论】:

      【解决方案2】:

      你可以使用这个,只是根据你的需要改变主要的^^

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

      【讨论】:

        【解决方案3】:

        我同意 Dan Dimerman 的观点,可以推荐 swingX 库。我们也在商业应用程序中使用JXDatePicker。通过JXMonthView,您可以编写自己的日期选择器变体。

        【讨论】:

          【解决方案4】:

          试试swinglabs。除了日期选择器之外,还有很多其他功能......享受吧。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-23
            相关资源
            最近更新 更多