📄 dataimporter.java
字号:
package tlz.imp;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.Document;
import tlz.Debug;
import tlz.imp.Worker.SourceFileButton;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.text.SimpleDateFormat;
public abstract class DataImporter extends Thread {
protected boolean jobCanceled = false;
JDesktopPane showPanel = null;
JPanel samplePanel = null;
File dataFile = null;
private JTextArea messageArea = new JTextArea();
private JProgressBar progressBar = null;
protected boolean isRunning = false;
protected boolean exitWhenDone = false;
protected DoCancelButton cancelButton = null;
public boolean isRunning(){
return isRunning;
}
public DataImporter(JDesktopPane showPanel, File dataFile){
this.showPanel = showPanel;
this.dataFile = dataFile;
//showPanel.add(messageArea, BorderLayout.SOUTH);
}
protected void prepareForImport(){
showPanel.remove(0);
JPanel topPane = new JPanel();
topPane.setLayout(new GridLayout(2,1));
progressBar = new JProgressBar(0, 100);
progressBar.setStringPainted(true);
topPane.add(progressBar);
cancelButton = new DoCancelButton();
topPane.add(cancelButton);
JPanel pan = new JPanel();
pan.add(topPane , BorderLayout.NORTH);
messageArea.setEditable(false);
JScrollPane jsp = new JScrollPane(messageArea);
jsp.setPreferredSize(new Dimension(600,100));
pan.add(jsp,BorderLayout.SOUTH);
pan.setPreferredSize(new Dimension(600,300));
showPanel.add(pan);
this.showPercent(0);
/*try{
sleep(5000);
}catch(Exception e){
}*/
}
protected void showSample(JTable table){
JPanel pan = new JPanel();
pan.add(table , BorderLayout.CENTER);
showPanel.add(pan);
}
public void run(){
try{
doImport();
}catch(Exception e){
e.printStackTrace();
//this.writeLog(e.getMessage());
}
}
public void writeLog(String mes){
if(! mes.endsWith("\n")) mes += "\n";
Document doc = messageArea.getDocument();
try{
doc.insertString(doc.getLength(), mes, null);
if(doc.getLength() > 80000) messageArea.setText(messageArea.getText().substring(40000));
}catch(Exception e){
//e.printStackTrace();
}
}
protected void showPercent(int percent){
progressBar.setValue(percent);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Worker.appWindow.pack();
}
});
}
public class SampleDataTableModel extends DefaultTableModel{
public SampleDataTableModel(int row,int column){
super(row,column);
}
public SampleDataTableModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);
}
public boolean isCellEditable(int row, int column) {
return false;
}
}
class ReturnButton extends JButton implements ActionListener{
public ReturnButton(String str){
super(str);
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
Worker.appWindow.showHomePage();
}
}
class DoImportButton extends JButton implements ActionListener{
public DoImportButton(){
super("开始导入");
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
Debug.print("prepareForImport");
prepareForImport();
Debug.print("start");
start();
}
}
class DoCancelButton extends JButton implements ActionListener{
public DoCancelButton(){
super("取消");
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
cancelOperation();
}
}
public void cancelOperation(){
if(isRunning && JOptionPane.showConfirmDialog(Worker.appWindow,"确认要取消导入操作吗?") == JOptionPane.OK_OPTION){
jobCanceled = true;
}
}
protected abstract void doCancel() throws Exception;
public abstract void showSample() throws Exception;
protected abstract int doImport() throws Exception;
protected String getAttachURI(String baseURI, String attachPath){
String ret = attachPath.replaceAll("%20", " ");;
ret = ret.replaceAll("\\", "/");
if(ret.lastIndexOf("/") > -1){
ret = ret.substring(0,ret.lastIndexOf("/")) + ret.substring(ret.lastIndexOf("/")).toLowerCase();
}
return baseURI + ret;
}
private static int GBK_BYTE_LENTH = 2;
private static final char blank = ' ';
private static String cutForGBK(String str, int dataWidth) throws Exception{
byte[] data = str.getBytes("GBK");
if(data == null) return "";
int index = 0,actualIndex = 0;
while(index < dataWidth && index < data.length && actualIndex < dataWidth && actualIndex < data.length){
//if(actualIndex >= data.length) break;
if(data[actualIndex] < 0) {
//如果是中文字符,跳过2个字节
if(index + GBK_BYTE_LENTH > dataWidth){
for(int z = actualIndex; z < dataWidth; z ++){
data[z] = (byte) blank;
}
break;
}
actualIndex += 2;
index += GBK_BYTE_LENTH;
}else{
//如果是英文字符,跳过本字节
index ++;
actualIndex ++;
}
}
if(actualIndex < dataWidth && index < data.length){
for(int z = actualIndex; z < dataWidth; z ++){
data[z] = (byte) blank;
}
}
byte [] n = new byte[dataWidth];
System.arraycopy(data,0,n,0,dataWidth);
return new String(n,"GBK");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -