如果是JTable.等java圖形界面的組件,那么獲取數(shù)據(jù),賦值都比較簡(jiǎn)單.
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供臺(tái)前網(wǎng)站建設(shè)、臺(tái)前做網(wǎng)站、臺(tái)前網(wǎng)站設(shè)計(jì)、臺(tái)前網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、臺(tái)前企業(yè)網(wǎng)站模板建站服務(wù),10多年臺(tái)前做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
但是看圖片,是要寫一個(gè)Excel的輔助功能, 這對(duì)java來說還是有點(diǎn)麻煩了.
最優(yōu)建議:
Excel的功能. 那么最佳的建議,是使用vba 語(yǔ)言進(jìn)行擴(kuò)展.(微軟出品,簡(jiǎn)單,方便,代碼量極少) .
其次的建議:
C/C++ 鍵盤鉤子 , 當(dāng)讀取到按鍵F9時(shí) ,模擬鍵盤的復(fù)制粘貼等操作.
不推薦java , 但java也能勉強(qiáng)湊合解決這個(gè)問題:
因?yàn)閖ava 很難獲取系統(tǒng)底層的按鍵, Robot也很有局限, 比如窗口失去焦點(diǎn)的時(shí)候,讀取不到F9按鍵. ? 所以java需要調(diào)用JNI c語(yǔ)言 比較繁瑣. 比較簡(jiǎn)單的是調(diào)用JNA了,但代碼量也不少.
當(dāng)然了如果非要用java寫,也可以,我手寫了一個(gè)簡(jiǎn)單的JNA+Robot配合
效果圖
如果你想要拷貝一個(gè)文件, 最好用字節(jié)流, 我?guī)湍銓懥艘粋€(gè), 是拷貝二進(jìn)制的, 你的只是拷貝文本比較好用, 但你也忘了加換行了
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:/a.jpg");
FileOutputStream fos = new FileOutputStream("D:/d.jpg");
byte[] bs = new byte[1024];
int len = -1;
while ((len = fis.read(bs)) != -1) {
fos.write(bs, 0, len);
}
fos.close();
fis.close();
}
}
java 中的剪切板
通過操作系統(tǒng)的剪切板,可以實(shí)現(xiàn)在不同的程序中拷貝和粘貼數(shù)據(jù)。一些用Java寫的程序例如很多開發(fā)環(huán)境也可以訪問到剪切板,本文就是研究如何在Java程序中讀寫系統(tǒng)剪切板的數(shù)據(jù)。
Java中使用java.awt.datatransfer.Clipboard類來描述剪切板,并把剪切板分為兩種類型:本地和系統(tǒng),本地剪切板使用 Clipborad cp = new Clipboard("clip1"); 來構(gòu)造;系統(tǒng)剪切板通過
Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
獲取,下面我們給出幾個(gè)常用的方法用于讀寫剪切板中的文本數(shù)據(jù)以及圖像數(shù)據(jù)
1. 從指定的剪切板中獲取文本內(nèi)容
protected static String getClipboardText(Clipboard clip) throws Exception{
// 獲取剪切板中的內(nèi)容
Transferable clipT = clip.getContents(null);
if (clipT != null) {
// 檢查內(nèi)容是否是文本類型
if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
return (String)clipT.getTransferData(DataFlavor.stringFlavor);
}
return null;
}
2. 往剪切板寫文本數(shù)據(jù)
protected static void setClipboardText(Clipboard clip, String writeMe) {
Transferable tText = new StringSelection(writeMe);
clip.setContents(tText, null);
}
3. 從剪切板讀取圖像
public static Image getImageFromClipboard() throws Exception{
Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable cc = sysc.getContents(null);
if (cc == null)
return null;
else if(cc.isDataFlavorSupported(DataFlavor.imageFlavor))
return (Image)cc.getTransferData(DataFlavor.imageFlavor);
return null;
}
4. 寫圖像到剪切板
protected static void setClipboardImage2(final Image image) {
Transferable trans = new Transferable(){
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.imageFlavor };
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.imageFlavor.equals(flavor);
}
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if(isDataFlavorSupported(flavor))
return image;
throw new UnsupportedFlavorException(flavor);
}
};
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
}
有了這四個(gè)方法,你下面可以自己寫一些程序來進(jìn)行測(cè)試,利用它來實(shí)現(xiàn)與其他程序結(jié)合測(cè)試對(duì)剪切板數(shù)據(jù)的操作。這里給出一個(gè)用于顯示圖像的類,只要把Image實(shí)例作為參數(shù)傳入即可。
/*
* Created on 2004-12-23
* 查看圖形的窗口
*/
package javayou.clipboard;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @author Winter Lau 用于顯示圖形的窗口
*/
public class ImageViewer extends Frame {
private Image image;
/**
* 顯示一個(gè)圖像
* @param viewMe
*/
public ImageViewer(Image viewMe) {
image = viewMe;
MediaTracker mediaTracker = new MediaTracker(this);
mediaTracker.addImage(image, 0);
try {
mediaTracker.waitForID(0);
} catch (InterruptedException ie) {
ie.printStackTrace();
System.exit(1);
}
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//窗口適應(yīng)圖像大小
setSize(image.getWidth(null), image.getHeight(null));
//窗口標(biāo)題
setTitle("Viewing Image from Clipboard");
setVisible(true);
}
public void paint(Graphics graphics) {
graphics.drawImage(image, 0, 0, null);
}
/**
* 用于讀取圖像文件并生成Image對(duì)象
*/
public static Image getImageFromFile(String fileName) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage(fileName);
return image;
}
}
這是我們公司基類里的一個(gè)方法希望對(duì)你有幫助。。/**
* 復(fù)制單個(gè)文件
* @param oldPath String 原文件路徑 如:c:/fqf.txt
* @param newPath String 復(fù)制后路徑 如:f:/fqf.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在時(shí)
InputStream inStream = new FileInputStream(oldPath); //讀入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字節(jié)數(shù) 文件大小
// System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}
catch (Exception e) {
System.out.println("復(fù)制單個(gè)文件操作出錯(cuò)");
e.printStackTrace(); } }