日历显示使用Java Swing [英] Calendar display using Java Swing

查看:210
本文介绍了日历显示使用Java Swing的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在java swing(独立应用程序)中进行考勤项目,每当他们使用用户ID和密码登录时,可以更新每位员工的出勤情况。



一天内仅出席一次。



现在,我想显示一个日历他登录的日期不同于他没有的日子(意思是他没有登录的日子)。



我目前的状态是链接 http://devajkumarsuthapalli.blogspot.in/2013/06/my-java-project_20.html 在这样的日历中 http://tinyurl.com/ps23csu



我想看到有不同颜色和缺席的员工登录日期不一样颜色

解决方案

您将要创建自己的日历组件,以便您可以将日期设置为不同的颜色。 / p>

这是我为我的一个项目创建的日历。





这是$ code> MonthPanel 代码生成日历。现在,它突出了当前的一天。您可以修改它以突出显示员工登录的日期。

  import java.awt.BorderLayout; 
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.util.Calendar;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MonthPanel extends JPanel {

private static final long serialVersionUID = 1L;

protected int month;
protected int year;

protected String [] monthNames = {一月,二月,
三月,四月,五月,六月,七月,八月,九月,
十月,十一月,十二月};

protected String [] dayNames = {S,M,T,W,
T,F,S};

public MonthPanel(int month,int year){
this.month = month;
this.year = year;

this.add(createGUI());
}

protected JPanel createGUI(){
JPanel monthPanel = new JPanel(true);
monthPanel.setBorder(BorderFactory
.createLineBorder(SystemColor.activeCaption));
monthPanel.setLayout(new BorderLayout());
monthPanel.setBackground(Color.WHITE);
monthPanel.setForeground(Color.BLACK);
monthPanel.add(createTitleGUI(),BorderLayout.NORTH);
monthPanel.add(createDaysGUI(),BorderLayout.SOUTH);

return monthPanel;
}

protected JPanel createTitleGUI(){
JPanel titlePanel = new JPanel(true);
titlePanel.setBorder(BorderFactory
.createLineBorder(SystemColor.activeCaption));
titlePanel.setLayout(new FlowLayout());
titlePanel.setBackground(Color.WHITE);

JLabel label = new JLabel(monthNames [month] ++年);
label.setForeground(SystemColor.activeCaption);

titlePanel.add(label,BorderLayout.CENTER);

return titlePanel;
}

protected JPanel createDaysGUI(){
JPanel dayPanel = new JPanel(true);
dayPanel.setLayout(new GridLayout(0,dayNames.length));

今天Calendar = Calendar.getInstance();
int tMonth = today.get(Calendar.MONTH);
int tYear = today.get(Calendar.YEAR);
int tDay = today.get(Calendar.DAY_OF_MONTH);

日历calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH,month);
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.DAY_OF_MONTH,1);

日历iterator =(Calendar)calendar.clone();
iterator.add(Calendar.DAY_OF_MONTH,
- (iterator.get(Calendar.DAY_OF_WEEK) - 1));

日历最大=(日历)calendar.clone();
maximum.add(Calendar.MONTH,+1); (int i = 0; i< dayNames.length; i ++){
JPanel dPanel = new JPanel(true);


dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel dLabel = new JLabel(dayNames [i]);
dPanel.add(dLabel);
dayPanel.add(dPanel);
}

int count = 0;
int limit = dayNames.length * 6;

while(iterator.getTimeInMillis()< maximum.getTimeInMillis()){
int lMonth = iterator.get(Calendar.MONTH);
int lYear = iterator.get(Calendar.YEAR);

JPanel dPanel = new JPanel(true);
dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel dayLabel = new JLabel();

if((lMonth == month)&&(lYear == year)){
int lDay = iterator.get(Calendar.DAY_OF_MONTH);
dayLabel.setText(Integer.toString(lDay));
if((tMonth == month)&&(tYay == year)&(tDay == lDay)){
dPanel.setBackground(Color.ORANGE);
} else {
dPanel.setBackground(Color.WHITE);
}
} else {
dayLabel.setText();
dPanel.setBackground(Color.WHITE);
}
dPanel.add(dayLabel);
dayPanel.add(dPanel);
iterator.add(Calendar.DAY_OF_YEAR,+1);
count ++; (int i = count; i< limit; i ++){
JPanel dPanel = new JPanel(true);
}


dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel dayLabel = new JLabel();
dayLabel.setText();
dPanel.setBackground(Color.WHITE);
dPanel.add(dayLabel);
dayPanel.add(dPanel);
}

return dayPanel;
}

}

这里是我曾经用过的代码生成 JFrame 以显示 MonthPanel

  import java.awt.FlowLayout; 
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class CalendarFrame实现Runnable {

private JFrame frame;

@Override
public void run(){
//月份为零
MonthPanel panel = new MonthPanel(5,2013);

frame = new JFrame();
frame.setTitle(Calendar);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent event){
exitProcedure();
}
}) ;

frame.setLayout(new FlowLayout());
frame.add(panel);
frame.pack();
// frame.setBounds(100,100,400,200);
frame.setVisible(true);
}

public void exitProcedure(){
frame.dispose();
System.exit(0);
}

public static void main(String [] args){
SwingUtilities.invokeLater(new CalendarFrame());

}

}


I am working on an attendance project in java swing (a stand alone application), which updates attendance of each employee whenever they log in with their user id and password.

Attendance will be taken only once in a day.

Now, I want to display a calendar with the days he logged in marked a different color from the days he didn't (meaning he was absent those un-logged-in days).

My current status is in the link http://devajkumarsuthapalli.blogspot.in/2013/06/my-java-project_20.html in a calendar like this http://tinyurl.com/ps23csu

I want to see employees logged in days with different color and absentees with a different color

解决方案

You're going to have to create your own Calendar component so that you can set the days to different colors.

Here's a calendar I created for one of my projects.

Here's the MonthPanel code that produces the calendar. Right now, it highlights the current day. You can modify it to highlight the days that your employees log in.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.util.Calendar;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MonthPanel extends JPanel {

    private static final long   serialVersionUID    = 1L;

    protected int               month;
    protected int               year;

    protected String[]          monthNames          = { "January", "February",
            "March", "April", "May", "June", "July", "August", "September",
            "October", "November", "December"       };

    protected String[]          dayNames            = { "S", "M", "T", "W",
            "T", "F", "S"                           };

    public MonthPanel(int month, int year) {
        this.month = month;
        this.year = year;

        this.add(createGUI());
    }

    protected JPanel createGUI() {
        JPanel monthPanel = new JPanel(true);
        monthPanel.setBorder(BorderFactory
                .createLineBorder(SystemColor.activeCaption));
        monthPanel.setLayout(new BorderLayout());
        monthPanel.setBackground(Color.WHITE);
        monthPanel.setForeground(Color.BLACK);
        monthPanel.add(createTitleGUI(), BorderLayout.NORTH);
        monthPanel.add(createDaysGUI(), BorderLayout.SOUTH);

        return monthPanel;
    }

    protected JPanel createTitleGUI() {
        JPanel titlePanel = new JPanel(true);
        titlePanel.setBorder(BorderFactory
                .createLineBorder(SystemColor.activeCaption));
        titlePanel.setLayout(new FlowLayout());
        titlePanel.setBackground(Color.WHITE);

        JLabel label = new JLabel(monthNames[month] + " " + year);
        label.setForeground(SystemColor.activeCaption);

        titlePanel.add(label, BorderLayout.CENTER);

        return titlePanel;
    }

    protected JPanel createDaysGUI() {
        JPanel dayPanel = new JPanel(true);
        dayPanel.setLayout(new GridLayout(0, dayNames.length));

        Calendar today = Calendar.getInstance();
        int tMonth = today.get(Calendar.MONTH);
        int tYear = today.get(Calendar.YEAR);
        int tDay = today.get(Calendar.DAY_OF_MONTH);

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        Calendar iterator = (Calendar) calendar.clone();
        iterator.add(Calendar.DAY_OF_MONTH,
                -(iterator.get(Calendar.DAY_OF_WEEK) - 1));

        Calendar maximum = (Calendar) calendar.clone();
        maximum.add(Calendar.MONTH, +1);

        for (int i = 0; i < dayNames.length; i++) {
            JPanel dPanel = new JPanel(true);
            dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            JLabel dLabel = new JLabel(dayNames[i]);
            dPanel.add(dLabel);
            dayPanel.add(dPanel);
        }

        int count = 0;
        int limit = dayNames.length * 6;

        while (iterator.getTimeInMillis() < maximum.getTimeInMillis()) {
            int lMonth = iterator.get(Calendar.MONTH);
            int lYear = iterator.get(Calendar.YEAR);

            JPanel dPanel = new JPanel(true);
            dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            JLabel dayLabel = new JLabel();

            if ((lMonth == month) && (lYear == year)) {
                int lDay = iterator.get(Calendar.DAY_OF_MONTH);
                dayLabel.setText(Integer.toString(lDay));
                if ((tMonth == month) && (tYear == year) && (tDay == lDay)) {
                    dPanel.setBackground(Color.ORANGE);
                } else {
                    dPanel.setBackground(Color.WHITE);
                }
            } else {
                dayLabel.setText(" ");
                dPanel.setBackground(Color.WHITE);
            }
            dPanel.add(dayLabel);
            dayPanel.add(dPanel);
            iterator.add(Calendar.DAY_OF_YEAR, +1);
            count++;
        }

        for (int i = count; i < limit; i++) {
            JPanel dPanel = new JPanel(true);
            dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            JLabel dayLabel = new JLabel();
            dayLabel.setText(" ");
            dPanel.setBackground(Color.WHITE);
            dPanel.add(dayLabel);
            dayPanel.add(dPanel);
        }

        return dayPanel;
    }

}

And here's the code I used to produce the JFrame to display the MonthPanel.

import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class CalendarFrame implements Runnable {

    private JFrame  frame;

    @Override
    public void run() {
        // Month is zero based
        MonthPanel panel = new MonthPanel(5, 2013);

        frame = new JFrame();
        frame.setTitle("Calendar");
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent event) {
                exitProcedure();
            }
        });

        frame.setLayout(new FlowLayout());
        frame.add(panel);
        frame.pack();
        // frame.setBounds(100, 100, 400, 200);
        frame.setVisible(true);
    }

    public void exitProcedure() {
        frame.dispose();
        System.exit(0);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new CalendarFrame());

    }

}

这篇关于日历显示使用Java Swing的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆