如何在java中显示假期?

时间:2016-04-02 05:38:36

标签: java

我正在尝试用Java创建日历应用程序并成功完成日历显示部分。现在,我需要在日历条目下方显示Holiday消息。

例如,如果日历显示4月份,那么“4月1日 - 愚人节”。将显示。

有人可以告诉我该怎么做吗?这是我的代码:

    import java.time.Month;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;


public class SwingCalendar extends JFrame {
     private JFrame mainFrame;
    private JLabel headerLabel;
       private JLabel statusLabel;
       private JPanel controlPanel;
       private JLabel msglabel;

  DefaultTableModel model;
  Calendar cal = new GregorianCalendar();
  JLabel label;

  SwingCalendar() {

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("Swing Calandar");
    this.setSize(300,200);
    this.setLayout(new BorderLayout());
    this.setVisible(true);


    label = new JLabel();
    label.setHorizontalAlignment(SwingConstants.CENTER);

    JButton b1 = new JButton("Back");
    b1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        cal.add(Calendar.MONTH, -1);
        updateMonth();
      }
    });

    JButton b2 = new JButton("Next");
    b2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        cal.add(Calendar.MONTH, +1);
        updateMonth();
      }
    });

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(b1,BorderLayout.WEST);
    panel.add(label,BorderLayout.CENTER);
    panel.add(b2,BorderLayout.EAST);


    String [] columns = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
    model = new DefaultTableModel(null,columns);
    JTable table = new JTable(model);
    JScrollPane pane = new JScrollPane(table);

    this.add(panel,BorderLayout.NORTH);
    this.add(pane,BorderLayout.CENTER);

    this.updateMonth();

  }

  void updateMonth() {
    cal.set(Calendar.DAY_OF_MONTH, 1);

    String month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.US);
    int year = cal.get(Calendar.YEAR);
    label.setText(month + " " + year);

    int startDay = cal.get(Calendar.DAY_OF_WEEK);
    int numberOfDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    int weeks = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);

    model.setRowCount(0);
    model.setRowCount(weeks);

    int i = startDay-1;
    for(int day=1;day<=numberOfDays;day++){
      model.setValueAt(day, i/7 , i%7 );    
      i = i + 1;
    }

    }


  public static void main(String[] arguments) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    SwingCalendar sc = new SwingCalendar();    

  }

  private void showJPanelDemo(){
      headerLabel.setText("Container in action: JPanel");      
      msglabel = new JLabel("Welcome to TutorialsPoint SWING Tutorial.", JLabel.CENTER);
      JPanel panel = new JPanel();
      panel.setBackground(Color.magenta);
      panel.setLayout(new FlowLayout());        
      panel.add(msglabel);

      controlPanel.add(panel);        
      mainFrame.setVisible(true);      
   }   

}

2 个答案:

答案 0 :(得分:0)

在此背景下,人们尝试使用JollyDay Calendar

您可能需要检查并使用相关的API。您可以使用XML文件设置特定的假日日历。

答案 1 :(得分:0)

我建议你为假期设计一个数据结构。有几种选择。一个简单的选项是字符串的二维数组,其中String表示假日,null表示&#34;不是假日&#34;。我可能会或可能不满足您的要求。

在循环中,您可以查找数据结构。如果找到假期,您会执行类似model.setValueAt(day + " " + holiday, i/7 , i%7);的操作。如果您需要更多指导,请添加评论。