アイデア分析:
操作パネルと進行状況バーの両方が必要なため、JFrameクラスを継承する2つのフォームが表示されなければなりません。
まず、呼び出されたProgress Barフォームを見てください。そのため、クラス内にメソッドを実装できます。設計ファイルの操作のため、例外をキャッチする必要があります。まず、コピーするファイルに基づいてファイルオブジェクトを作成し、コピーされたファイルの保存されたアドレスに基づいてファイルオブジェクトを作成し、FileOutputStreamオブジェクトを作成し、FileInputStreamオブジェクトを作成し、続いてProgressMonitorInputStreamオブジェクトを作成し、次に読み取りますファイル合計時間が2秒以上かかると、進行状況監視ウィンドウが自動的にポップアップされます。次に、バイト配列を定義し、whileループを使用してファイルを読み取り、fileoutputStreamクラスのwrite()メソッドを使用してストリームを介してデータを書き込み、fileoutputStreamクラスのclose()メソッドを使用して出力ストリームを閉じます。最後に、ProgressMonitorInputStreamクラスのclose()方法を使用して、入力ストリームを閉じます。このメソッドには、親ウィンドウがポップアップし、ファイルアドレスをコピーする、コピーするフォルダーの3つのパラメーターが必要であることがわかります。
コードは次のとおりです。
ProgressMonitortest.java:
コードコピーは次のとおりです。
パッケージcn.edu.xidian.crytoll;
java.io.fileinputStreamをインポートします。
java.io.*をインポートします。
javax.swing.jframeをインポートします。
javax.swing.progressmonitorinputStreamをインポートします。
Public Class ProgressMonitortest {
public void useprogressmonitor(jframe frame、string copypath、string newpath){
試す {
ファイル= new file(copypath);
ファイルnewfile = newファイル(newPath);
fileoutputStream fop = new fileoutputStream(newFile);
inputstream in = new fileinputStream(file);
//ファイルを読み取ります。合計で2秒以上かかります。
ProgressMonitorInputStream PM = new ProgressMonitorInputStream(
フレーム、「ファイルの読み取り、待ってください...」、in);
int c = 0;
バイト[] bytes = new byte [1024];
while((c = pm.read(bytes))!= -1){//ファイルを読み取るためにループ
fop.write(bytes、0、c);
}
fop.close();
PM.Close(); //入力ストリームを閉じます
} catch(例外Ex){
ex.printstacktrace();
}
}
}
3.メインフォームをもう一度見てください。言うまでもなく、JlabelとJTextfieldは2つのボタンであり、ファイルを選択してフォルダーを選択することも一般的です。新しいもの。したがって、メインフォームはJFrameクラスを継承するだけでなく、実行可能なインターフェイスを実装する必要があります。彼の叔父。
4.コピーボタンを起動する特定の方法で、まず新しいスレッドとしてスレッドオブジェクトを作成し、次にオブジェクトのstart()メソッドを呼び出し、run()メソッドをオーバーロードし、メソッドで進行状のバーオブジェクトを作成し、使用し、 JTextfieldクラスのgetText()メソッドファイルアドレスをコピーし、コピーするパスを取得し、Progress Barクラスでメソッドを呼び出します。
コードは次のとおりです。
コードコピーは次のとおりです。
パッケージcn.edu.xidian.crytoll;
java.awt.borderlayoutをインポートします。
java.awt.desktopをインポートします。
java.awt.dimensionをインポートします。
java.awt.eventqueueをインポートします。
java.awt.gridbagconstraintsをインポートします。
java.awt.gridbaglayoutをインポートします。
java.awt.insetsをインポートします。
java.awt.event.actioneventをインポートします。
java.awt.event.actionlistenerをインポートします。
java.io.fileをインポートします。
java.io.filenotfoundexceptionをインポートします。
java.io.filereaderをインポートします。
java.io.filewriterをインポートします。
java.io.ioexceptionをインポートします。
javax.swing.jbuttonをインポートします。
javax.swing.jfilechooserをインポートします。
javax.swing.jframeをインポートします。
javax.swing.jlabelをインポートします。
javax.swing.joptionpaneをインポートします。
javax.swing.jpanelをインポートします。
javax.swing.jtextfieldをインポートします。
javax.swing.border.emptyborderをインポートします。
javax.swing.filechooser.filenameextensionfilterをインポートします。
パブリッククラスのusermonitorframe拡張jframe runnable {
/**
*
*/
private static final long serialversionuid = 8674569541853793419l;
プライベートJPanel ContentSpane;
プライベートjtextfield filefield;
プライベートjtextfield searchTextfield;
プライベートjtextfieldの交換テキストフィールド。
プライベートファイルファイル。
プライベートJTextfield Textfield;
プライベートJTextField Textfield_1;
/**
*アプリケーションを起動します。
*/
public static void main(string [] args){
eventqueue.invokelater(new runnable(){
public void run(){
試す {
usermonitorframe frame = new usermonitorframe();
frame.setVisible(true);
} catch(例外e){
e.printstacktrace();
}
}
});
}
/**
*フレームを作成します。
*/
public usermonitrframe(){
setSresizable(false);
setDefaultCloseoperation(jframe.exit_on_close);
セットバウンド(100、100、501、184);
settitle( "ファイルを読むときに進行状況バーを使用");
getContentPane()。setLayout(null);
jlabel label = new Jlabel( "/u6587/u4ef6/u5730/u5740/uff1a");
label.setbounds(10、10、70、15);
getContentPane()。add(label);
textfield = new jtextfield();
textfield.setbounds(90、7、300、21);
getContentPane()。add(textfield);
textfield.setColumns(10);
jbutton button = new jbutton( "/u9009/u62e9/u6587/u4ef6");
button.addActionListener(new ActionListener(){
public void actionperformed(ActionEvent e){
do_button_actionperformed(e);
}
});
button.setbounds(400、6、93、23);
getContentPane()。追加(ボタン);
Jlabel label_1 = new Jlabel( "/u590d/u5236/u5730/u5740/uff1a");
label_1.setbounds(10、40、70、15);
getContentPane()。add(label_1);
textfield_1 = new jtextfield();
textfield_1.setbounds(90、38、300、21);
getContentPane()。add(textfield_1);
textfield_1.setColumns(10);
jbutton button_1 = new jbutton( "/u9009/u62e9/u5730/u5740");
button_1.addActionListener(new ActionListener(){
public void actionperformed(ActionEvent e){
do_button_1_actionperformed(e);
}
});
button_1.setbounds(400、39、93、23);
getContentPane()。add(button_1);
jbutton button_2 = new jbutton( "/u5f00/u59cb/u590d/u5236");
button_2.addActionListener(new ActionListener(){
public void actionperformed(ActionEvent e){
do_copybutton_actionperformed(e);
}
});
button_2.setbounds(182、69、93、23);
getContentPane()。add(button_2);
}
保護されたvoid do_button_actionperformed(actionevent e){
jfilechooser chooser = new jfilechooser();
chooser.setfileselectionMode(jfilechooser.files_only);
// [ファイル]開くダイアログボックスを表示します
int option = chooser.showopendialog(this);
//ユーザーがキャンセルボタンの代わりに開いたボタンを押していることを確認してください
if(option!= jfilechooser.approve_option)
戻る;
//ユーザーが選択したファイルオブジェクトを取得します
file = chooser.getSelectedFile();
//ファイル情報をテキストボックスに表示します
textfield.settext(file.toString());
}
保護されたvoid do_button_1_actionperformed(actionevent e){
jfilechooser chooser = new jfilechooser();
chooser.setfileselectionMode(jfilechooser.directories_only);
int option = chooser.showopendialog(this);
if(option!= jfilechooser.approve_option)
戻る;
file = chooser.getSelectedFile();
textfield_1.settext(file.toString());
}
// [コピー]ボタンクリックイベントを確認します
保護されたvoid do_copybutton_actionperformed(actionevent arg0){
スレッドスレッド= newスレッド(this);
thread.start();
}
//マルチスレッドテクノロジーを使用して、読み取り操作を実現します
@オーバーライド
public void run(){
ProgressMonitortest test = new ProgressMonitortest();
string path = textfield.getText();
文字列save = textfield_1.getText();
test.useprogressmonitor(this、path、save+path.substring(path.lastindexof( "。")、path.length()));
}
}