/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hadeslee.yoyoplayer.player.ui;
import com.hadeslee.yoyoplayer.util.Config;
import com.hadeslee.yoyoplayer.util.Util;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DecimalFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*
* @author hadeslee
*/
public class TimePanel extends JPanel implements MouseListener {
private static final long serialVersionUID = 20071214L;
private static Logger log = Logger.getLogger(TimePanel.class.getName());
private boolean isNormal;//
private int seconds;//
private int length;//
private ImageBorder border1, border2;
private JLabel sign, minLeft, minRight, colon, secLeft, secRight;//
private ImageIcon[] numbers;//09
private Image signImage, colonImage;//,
private Dimension numberSize = new Dimension(13, 17);
public TimePanel() {
super(null);
this.setOpaque(false);
this.setPreferredSize(new Dimension(numberSize.width * 6, 17));
this.addMouseListener(this);
initOther();
isNormal = Config.getConfig().getShowTimeStyle() == Config.SHOWTIME_POSITIVE;
log.log(Level.INFO, "isNormal:" + isNormal);
}
public int getSeconds() {
return seconds;
}
/**
* ,
* @param allSec
*/
public void reset(int length) {
log.log(Level.INFO, "TimePanel:" + length);
this.length = length;
seconds = 0;
repaint();
}
/**
* ,00
*/
public void reset() {
length = 0;
seconds = 0;
repaint();
}
private void initOther() {
// border1 = new ImageBorder();
// border1.setImage(getImage("pic/timeBorder1.png"));
// border2 = new ImageBorder();
// border2.setImage(getImage("pic/timeBorder2.png"));
signImage = Util.getImage("numbers/signImage.png");
colonImage = Util.getImage("numbers/colon.png");
sign = new JLabel();
minLeft = new JLabel();
minRight = new JLabel();
colon = new JLabel();
secLeft = new JLabel();
secRight = new JLabel();
numbers = new ImageIcon[10];
sign.setPreferredSize(numberSize);
minLeft.setPreferredSize(numberSize);
minRight.setPreferredSize(numberSize);
colon.setPreferredSize(numberSize);
secLeft.setPreferredSize(numberSize);
secRight.setPreferredSize(numberSize);
sign.setIcon(new ImageIcon(signImage));
colon.setIcon(new ImageIcon(colonImage));
for (int i = 0; i < numbers.length; i++) {
numbers[i] = new ImageIcon(Util.getImage("numbers/" + i + ".png"));
}
minLeft.setIcon(numbers[0]);
minRight.setIcon(numbers[0]);
secLeft.setIcon(numbers[0]);
secRight.setIcon(numbers[0]);
// setBorder(border1);
int x = 0, y = 0;
sign.setBounds(x, y, 13, 17);
minLeft.setBounds(x += 13, y, 12, 17);
minRight.setBounds(x += 13, y, 12, 17);
colon.setBounds(x += 13, y, 12, 17);
secLeft.setBounds(x += 13, y, 12, 17);
secRight.setBounds(x += 13, y, 12, 17);
sign.setVisible(false);
this.add(sign);
this.add(minLeft);
this.add(minRight);
this.add(colon);
this.add(secLeft);
this.add(secRight);
}
public void setTime(int seconds) {
this.seconds = seconds;
if (!isNormal && length > 0) {
showNumber(seconds - length);
} else {
showNumber(seconds);
}
}
/**
* ,,
* ,,
* ,
* @param number
*/
private void showNumber(int number) {
int temp = Math.abs(number);
DecimalFormat df = new DecimalFormat("00");
String sec = df.format(temp % 60);
secLeft.setIcon(numbers[sec.charAt(0) - 48]);
secRight.setIcon(numbers[sec.charAt(1) - 48]);
String min = df.format(temp / 60);
minLeft.setIcon(numbers[min.charAt(0) - 48]);
minRight.setIcon(numbers[min.charAt(1) - 48]);
if (number >= 0) {
sign.setVisible(false);
} else {
sign.setVisible(true);
}
repaint();
}
public void mouseClicked(MouseEvent e) {
if (length <= 0) {
return;
}
if (length - seconds > 0) {
isNormal = !isNormal;
if (isNormal) {
this.setBorder(border1);
showNumber(seconds);
} else {
this.setBorder(border2);
showNumber(seconds - length);
}
Config.getConfig().setShowTimeStyle(isNormal ? Config.SHOWTIME_POSITIVE : Config.SHOWTIME_NEGATIVE);
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public static void main(String[] args) {
JFrame jf = new JFrame();
final TimePanel tp = new TimePanel();
tp.reset(10);
new Thread() {
public void run() {
int time = 0;
while (true) {
try {
Thread.sleep(1000);
tp.setTime(time++);
} catch (Exception exe) {
}
}
}
}.start();
jf.add(tp);
jf.pack();
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
|