package jdepend.framework.ui.dialog;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.io.IOException;
import java.io.InputStream;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import jdepend.framework.util.StreamUtil;
public class VersionDialog extends JDialog {
private static final String VERSION_FILE = "/version.txt";
private String[] data;
private Label l1;
private Label l2;
private Label l3;
private Label l4;
private Label l5;
private Label l6;
private Label l7;
private Label l8;
private Label l9;
private Label l10;
private JSlider slider;
private int current;
private Timer timer;
public VersionDialog() {
getContentPane().setLayout(new BorderLayout());
setSize(800, 300);
this.setLocationRelativeTo(null);// 窗口在屏幕中间显示
this.data = getVersionData();
getContentPane().add(BorderLayout.CENTER, this.createContentPanel());
getContentPane().add(BorderLayout.SOUTH, this.createJSlider());
PlayTask playTask = new PlayTask();
timer = new Timer();
timer.schedule(playTask, 0, 1000);
}
private JPanel createContentPanel() {
JPanel contentPanel = new JPanel(new GridLayout(10, 1));
l1 = new Label();
l2 = new Label();
l3 = new Label();
l4 = new Label();
l5 = new Label();
l6 = new Label();
l7 = new Label();
l8 = new Label();
l9 = new Label();
l10 = new Label();
contentPanel.add(l1);
contentPanel.add(l2);
contentPanel.add(l3);
contentPanel.add(l4);
contentPanel.add(l5);
contentPanel.add(l6);
contentPanel.add(l7);
contentPanel.add(l8);
contentPanel.add(l9);
contentPanel.add(l10);
return contentPanel;
}
private JSlider createJSlider() {
this.slider = new JSlider(0, data.length - 10, 0);
this.slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
current = slider.getValue();
if (data.length - current > 10) {
if (timer == null) {
PlayTask playTask = new PlayTask();
timer = new Timer();
timer.schedule(playTask, 0, 1000);
}
}
}
});
return this.slider;
}
private void play() {
if (data.length - current > 10) {
l1.setText(data[data.length - current - 10]);
l2.setText(data[data.length - current - 9]);
l3.setText(data[data.length - current - 8]);
l4.setText(data[data.length - current - 7]);
l5.setText(data[data.length - current - 6]);
l6.setText(data[data.length - current - 5]);
l7.setText(data[data.length - current - 4]);
l8.setText(data[data.length - current - 3]);
l9.setText(data[data.length - current - 2]);
l10.setText(data[data.length - current - 1]);
current++;
this.slider.setValue(current);
} else {
l1.setText(data[0]);
l2.setText(data[1]);
l3.setText(data[2]);
l4.setText(data[3]);
l5.setText(data[4]);
l6.setText(data[5]);
l7.setText(data[6]);
l8.setText(data[7]);
l9.setText(data[8]);
l10.setText(data[9]);
timer.cancel();
timer = null;
}
}
private String[] getVersionData() {
InputStream input = null;
try {
input = VersionDialog.class.getResourceAsStream(VERSION_FILE);
byte[] data = StreamUtil.getData(input);
return new String(data, "UTF-8").split("\n");
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class PlayTask extends TimerTask {
public PlayTask() {
}
@Override
public void run() {
play();
}
}
class Label extends AlphaPane {
private String text;
public Label() {
}
public void setText(String text) {
this.text = text;
this.repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString(text, 20, 10);
}
}
}