javaSwing 圣诞节倒计时

JLabel类:

package com.udc.test2;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;


import javax.swing.JLabel;


public class RichJLabel extends JLabel{


private int tracking;

private int left_x,left_y,right_x,right_y;


public RichJLabel(String text,int tracking){
super(text);
this.tracking=tracking;


}

private Color left_color,right_color;

public void setLeftShadow(int x,int y,Color c){
left_x=x;
left_y=y;
left_color=c;
}

public void setRightShadow(int x,int y,Color c){
right_x=x;
right_y=y;
right_color=c;
}

public Dimension getPreferredSize(){
String text=this.getText();

//字体
FontMetrics fm=this.getFontMetrics(getFont());

int w=fm.stringWidth(text);
w+=(text.length()-1)*tracking;
w+=left_x+right_x;
//设置偏移量
int h= fm.getHeight();
h+=left_y+right_y;

return new Dimension(w,h);
}

public synchronized void reSetText(String text){
this.setText(text);
updateUI();
}

public synchronized void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
char[] chars=getText().toCharArray();

FontMetrics fm=this.getFontMetrics(getFont());
int h=fm.getAscent();
int x=0;

for(int i=0;i<chars.length;i++){
char ch=chars[i];
int w=fm.charWidth(ch)+tracking;

g.setColor(left_color);
g.drawString(""+chars[i], x-left_x, h-left_y);

g.setColor(right_color);
g.drawString(""+chars[i], x+right_x, h+right_y);
//顺序 最后画前景
g.setColor(getForeground());
g.drawString(""+chars[i], x, h);
x+=w;
}

g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
}
}


主显示类

package com.udc.test2;


import java.awt.BorderLayout;
import java.awt.Color;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


import javax.swing.JFrame;
import javax.swing.JPanel;


public class Chrismas extends JFrame{


private JPanel mp;

JPanel centerP=new JPanel();
RichJLabel cen;

long endTime;

public Chrismas(){

bulidView();
 
new Thread(new Runnable(){


@Override
public void run() {
while(true){
try {
Thread.sleep(1000);


int endday=24-Calendar.getInstance().get(Calendar.DATE);

int endhour=24-Calendar.getInstance().get(Calendar.HOUR);

int endminute=60-Calendar.getInstance().get(Calendar.MINUTE);

int endsecond=60-Calendar.getInstance().get(Calendar.SECOND);

cen.reSetText("day:"+endday+" time:"+endhour+":"+endminute+":"+endsecond);


} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

}).start();

this.pack();
this.setVisible(true);
}

private void bulidView(){

mp=new JPanel();
mp.setLayout(new BorderLayout());

RichJLabel north=new RichJLabel("Days until " +
"Christmas",0);

north.setLeftShadow(5, 5, Color.white);
north.setRightShadow(-3,-3, new Color(0xccccff));

north.setForeground( new Color(0x8888ff));


north.setFont(north.getFont().deriveFont(60f));

this.getContentPane().add(mp);

mp.add(north,BorderLayout.NORTH);
mp.add(centerP,BorderLayout.CENTER);

int endday=24-Calendar.getInstance().get(Calendar.DATE);

int endhour=24-Calendar.getInstance().get(Calendar.HOUR);

int endminute=60-Calendar.getInstance().get(Calendar.MINUTE);

int endsecond=60-Calendar.getInstance().get(Calendar.SECOND);


cen=new RichJLabel("day:"+endday+" time:"+endhour+":"+endminute+":"+endsecond,0);

cen.setLeftShadow(5, 5, Color.white);
cen.setRightShadow(-3,-3, new Color(0xcc5500));

cen.setForeground( new Color(0xaa6644));


cen.setFont(cen.getFont().deriveFont(80f));

centerP.add(cen);
}

public static void main(String args[]){
Chrismas cs=new Chrismas();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值