|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- //import java.util.*;
- class Clock extends JPanel {
- int x,y,x0,y0,r,h,olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,ss,mm,hh,old_m,old_h,ang;
- final double RAD = Math.PI/180; //度数转换成弧度的比例
- Thread timer = null;
- //构造函数创建了一个函数
- public Clock() {
- int delay = 500;
- //创建一个监听事件
- ActionListener drawClock = new ActionListener() {
- public void actionPerformed(ActionEvent e){
- repaint();
- }
- };
- //创建一个时间计算器,每一秒触发一次
- new Timer(delay, drawClock).start();
- /* timer = new Thread();
- while(timer!=null){
- try{
- Thread.sleep(1000);
- }catch(InterruptedException e){}
- }*/
- }
- //实现ActionListener接口必须实现的方法
- //public void actionPerformed(ActionEvent evt){}
- //绘制图像
- public void paint(Graphics g){
- Graphics2D g2D = (Graphics2D)g;
- Insets insets = this.getInsets();
- int L = insets.left/2,T = insets.top/2;
- h = this.getSize().height;
- //g.setColor(Color.white);
- //画圆
- g2D.setStroke(new BasicStroke(4.0f));
- g.drawOval(L+40, T+40, h-80, h-80);
- r = h/2-40;
- x0 = 40+r-5+L;
- y0 = 40+r-5-T;
- ang = 60;
- //绘制时钟上的12个字
- for (int i = 1; i <= 12; i++) {
- x = (int)((r+10)*Math.cos(RAD*ang)+x0);
- y = (int)((r+10)*Math.sin(RAD*ang)+y0);
- g.drawString(""+i, x,h-y);
- ang -= 30;
- }
- //获得想在的时间
- Calendar now = new GregorianCalendar();
- int nowh = now.get(Calendar.HOUR_OF_DAY);
- int nowm = now.get(Calendar.MINUTE);
- int nows = now.get(Calendar.SECOND);
- String st;
- if(nowh<10) st = "0" + nowh; else st = ""+ nowh;
- if(nowm<10) st += ":0" + nowm; else st += ":"+ nowm;
- if(nows<10) st += ":0" + nows; else st += ":"+ nows;
- //在窗体上显示时间
- g.setColor(Color.pink);
- g.fillRect(L+40, T, 50, 28);
- g.setColor(Color.blue);
- g.drawString(st,L+40, T+26);
- //计算时间与度数的关系
- ss = 90-nows*6;
- mm = 90-nowm*6;
- hh = 90-nowh*30-nowm/2;
- x0 = r+40+L;
- y0 = r+40+T;
- g2D.setStroke(new BasicStroke(1.2f));
- //擦除秒针
- if (olds_x>0) {
- g.setColor(this.getBackground());
- g.drawLine(x0, y0, olds_x, h-olds_y);
- }else {
- old_m = mm;
- old_h = hh;
- }
- //绘制秒针
- x = (int)(r*0.9*Math.cos(RAD*ss))+x0;
- y = (int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;
- g.setColor(Color.yellow);
- g.drawLine(x0, y0, x, h-y);
- olds_x = x;
- olds_y = y;
- g2D.setStroke(new BasicStroke(2.2f));
- //擦除分针
- if (old_m != mm) {
- g.setColor(this.getBackground());
- g.drawLine(x0, y0, oldm_x, h-oldm_y);
- }
- //绘制分针
- x = (int)(r*0.7*Math.cos(RAD*mm))+x0;
- y = (int)(r*0.7*Math.sin(RAD*mm))+y0-2*T;
- g.setColor(Color.green);
- g.drawLine(x0, y0, x, h-y);
- oldm_x = x;
- oldm_y = y;
- old_m = mm;
- g2D.setStroke(new BasicStroke(3.4f));
- //擦除时针
- if (old_h != hh) {
- g.setColor(this.getBackground());
- g.drawLine(x0, y0, oldh_x, h-oldh_y);
- }
- //绘制时针
- x = (int)(r*0.5*Math.cos(RAD*hh))+x0;
- y = (int)(r*0.5*Math.sin(RAD*hh))+y0-2*T;
- g.setColor(Color.red);
- g.drawLine(x0, y0, x, h-y);
- oldh_x = x;
- oldh_y = y;
- old_h = hh;
- //g2D.setStroke(new BasicStroke(3.4f));
- }
- }
复制代码 上面是Clock类,目的是显示一个模拟时钟
下面是一个挂历的类
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Calendar;
- import javax.swing.*;
- import javax.swing.event.ChangeEvent;
- import javax.swing.event.ChangeListener;
- import javax.swing.table.AbstractTableModel;
- import javax.swing.table.TableCellRenderer;
- import javax.swing.table.TableModel;
- class MyCalendar extends JPanel {
- public static final String WEEK_SUN = "SUN";
- public static final String WEEK_MON = "MON";
- public static final String WEEK_TUE = "TUE";
- public static final String WEEK_WED = "WED";
- public static final String WEEK_THU = "THU";
- public static final String WEEK_FRI = "FRI";
- public static final String WEEK_SAT = "SAT";
- //设置背景色
- public static final Color background = new Color(100,100,200);
- //设置前景色
- public static final Color foreground = new Color(200,200,100);
- //设置题头星期的背景色和前景色
- public static final Color headerBackground = Color.yellow;
- public static final Color headerForeground = Color.green;
- private JPanel cPanel;
- private JLabel yearsLabel,monthsLabel; //年、月
- private JSpinner yearsSpinner; //年调控
- private JComboBox monthsComboBox; //月下拉框
- private JTable daysTable; //用来显示日期的table
- private AbstractTableModel daysModel;
- private Calendar calendar;
- //初始化,对所有的控件进行布局
- public MyCalendar(){
- cPanel = new JPanel();
- cPanel.setLayout(new BorderLayout());
- //cPanel.setBounds(0, 300, 300, 300);
- calendar = Calendar.getInstance();
- yearsLabel = new JLabel("Year:");
- yearsSpinner = new JSpinner();
- yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, "0000"));
- yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR)));
- //增加监听 监听年份的改变
- yearsSpinner.addChangeListener(new ChangeListener() {
- public void stateChanged(ChangeEvent arg0) {
- int day = calendar.get(Calendar.DAY_OF_MONTH);
- calendar.set(Calendar.DAY_OF_MONTH, 1);
- calendar.set(Calendar.YEAR, ((Integer)yearsSpinner.getValue()).intValue());
- int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
- calendar.set(Calendar.DAY_OF_MONTH, (day > maxDay ? maxDay: day));
- repaint();
- }
- });
- add(cPanel);
- JPanel yearMonthPanel = new JPanel();
- cPanel.add(yearMonthPanel,BorderLayout.NORTH);
- yearMonthPanel.setLayout(new GridLayout(1, 6));
- //yearMonthPanel.add(new JPanel(),BorderLayout.CENTER);
- JPanel yearPanel = new JPanel();
- yearMonthPanel.add(yearPanel);
- yearPanel.add(yearsLabel);
- yearPanel.add(yearsSpinner);
- //yearPanel.add(new JPanel());
- monthsLabel = new JLabel("Month: ");
- //向月份下拉框中增加内容
- monthsComboBox = new JComboBox();
- for (int i = 1; i <= 12; i++) {
- monthsComboBox.addItem(new Integer(i));
- }
- monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
- //监听月份的改变
- monthsComboBox.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent arg0) {
- int day = calendar.get(Calendar.DAY_OF_MONTH);
- calendar.set(Calendar.DAY_OF_MONTH, 1);
- calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex());;
- int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
- calendar.set(Calendar.DAY_OF_MONTH, (day > maxDay ? maxDay: day));
- repaint();
- }
- });
- JPanel monthPanel =new JPanel();
- yearMonthPanel.add(monthPanel);
- monthPanel.setLayout(new BorderLayout());
- monthPanel.add(monthsLabel,BorderLayout.WEST);
- JPanel monthPane2 =new JPanel();
- monthPanel.add(monthPane2,BorderLayout.CENTER);
- monthPane2.setLayout(new BorderLayout());
- monthPane2.add(monthsComboBox,BorderLayout.WEST );
- daysModel = new AbstractTableModel() {
- //设置行7
- public Object getValueAt(int row, int col) {
- if (row == 0) {
- return getHeader(col);
- }
- row -- ;
- Calendar calendar = (Calendar)MyCalendar.this.calendar.clone();
- calendar.set(Calendar.DAY_OF_MONTH, 1);
- int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
- int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1;
- int index = row * 7 +col;
- int dayIndex = index - moreDayCount + 1;
- if (index < moreDayCount || dayIndex > dayCount) {
- return null;
- }else {
- return new Integer(dayIndex);
- }
- }
- public int getRowCount() {
- return 7;
- }
- public int getColumnCount() {
- return 7;
- }
- };
- daysTable = new CalendarTable(daysModel,calendar);
- //设置每一个cell可以被选中
- daysTable.setCellSelectionEnabled(true);
- daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- daysTable.setDefaultRenderer(daysTable.getColumnClass(0), new TableCellRenderer() {
- public Component getTableCellRendererComponent(JTable table, Object value,
- boolean isSelect, boolean hasFocus, int row, int col) {
- String text = (value == null) ? "" :value.toString();
- JLabel cell = new JLabel(text);
- cell.setOpaque(true);
- if (row == 0) {
- cell.setForeground(headerForeground);
- cell.setBackground(headerBackground);
- }else {
- if (isSelect) {
- cell.setForeground(Color.white);
- cell.setBackground(Color.black);
- }else {
- cell.setForeground(foreground);
- cell.setBackground(background);
- }
- }
- return cell;
- }
- });
- repaint();
- cPanel.add(new JPanel(),BorderLayout.EAST);
- cPanel.add(daysTable,BorderLayout.CENTER);
- cPanel.add(new JPanel(),BorderLayout.WEST);
- this.setVisible(true);
- }
- public static String getHeader(int index){
- switch(index){
- case 0:
- return WEEK_SUN;
- case 1:
- return WEEK_MON;
- case 2:
- return WEEK_TUE;
- case 3:
- return WEEK_WED;
- case 4:
- return WEEK_THU;
- case 5:
- return WEEK_FRI;
- case 6:
- return WEEK_SAT;
- default:
- return null;
- }
- }
- public void updateView(){
- daysModel.fireTableDataChanged();
- daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH), calendar.get(Calendar.WEEK_OF_MONTH));
- daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_MONTH)-1, calendar.get(Calendar.DAY_OF_MONTH)-1);
- }
- //设置日历的table
- public static class CalendarTable extends JTable{
- private Calendar calendar;
- public CalendarTable(TableModel model,Calendar calendar){
- super(model);
- this.calendar = calendar;
- }
- public void changeSelection(int row,int col,boolean toggle,boolean extend){
- super.changeSelection(row, col, toggle, extend);
- if (row ==0) {
- return;
- }
- Object obj = this.getValueAt(row, col);
- if (obj != null) {
- calendar.set(Calendar.DAY_OF_MONTH, ((Integer)obj).intValue());
- }
- }
- }
- // public void actionPerformed(ActionEvent arg0) {
- //
- // }
- }
复制代码
下面是住类,界面类
- import java.awt.*;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- public class MyText
- {
- public static void main(String[] args) {
- new MyFrame("记事本",120,120,800,600);
- }
- }
- class MyFrame extends Frame{
- protected MyCalendar p2;
- protected Clock p1;
- MyFrame(String s,int x,int y,int w,int h) {
- super(s);
- MyPanel p4 = new MyPanel(w,h);
- p2 = new MyCalendar();
- Panel p3 = new Panel(null);
- p1 = new Clock();
- setSize(w, h);
- setLocation(x, y);
- p1.setBackground(Color.white);
- setLayout(new GridLayout(2,2));
- this.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent arg0) {
- System.exit(0);
- }
- });
- add(p2);
- add(p4);
- add(p3);
- add(p1);
- //this.setResizable(false);
- setVisible(true);
- }
- }
- class MyPanel extends TextArea{
- MyPanel(int w,int h)
- {
- setSize(50, 50);
- setLocation(300, 300);
- setEditable(true);
- }
- }
复制代码
|
|