大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java進(jìn)度條的使用

Java進(jìn)度條的使用

更新時(shí)間:2022-10-31 10:09:17 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2633次

如何使用進(jìn)度條

有時(shí),在程序中運(yùn)行的任務(wù)可能需要一段時(shí)間才能完成。用戶友好的程序向用戶提供一些指示,表明任務(wù)正在發(fā)生、任務(wù)可能需要多長(zhǎng)時(shí)間以及已經(jīng)完成了多少工作。一種表示工作的方式,也許是進(jìn)度量,是使用動(dòng)畫圖像。

另一種指示工作的方法是使用 Cursor類和Component-defined setCursor方法設(shè)置等待光標(biāo)。例如,以下代碼使等待光標(biāo)在光標(biāo)結(jié)束時(shí)顯示container(包括它包含的任何未指定光標(biāo)的組件):

container.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

要傳達(dá)任務(wù)的完成程度,您可以使用如下進(jìn)度條:

有時(shí)您無法立即確定長(zhǎng)時(shí)間運(yùn)行的任務(wù)的長(zhǎng)度,或者該任務(wù)可能會(huì)長(zhǎng)時(shí)間停留在相同的完成狀態(tài)。您可以通過將進(jìn)度條置于不確定模式來顯示沒有可測(cè)量進(jìn)度的工作。不確定模式下的進(jìn)度條會(huì)顯示動(dòng)畫以指示工作正在進(jìn)行。一旦進(jìn)度條可以顯示更有意義的信息,您應(yīng)該將其切換回其默認(rèn)的確定模式。在 Java 外觀中,不確定的進(jìn)度條如下所示:

Swing 提供了三個(gè)類來幫助您使用進(jìn)度條:

JProgressBar

一個(gè)可視組件,以圖形方式顯示總?cè)蝿?wù)已完成多少。使用不確定模式部分告訴您如何在任務(wù)范圍已知之前為進(jìn)度條設(shè)置動(dòng)畫以顯示活動(dòng)。

ProgressMonitor

不是可見組件。相反,此類的一個(gè)實(shí)例監(jiān)視任務(wù)的進(jìn)度并在必要時(shí)彈出一個(gè)對(duì)話框。

ProgressMonitorInputStream

帶有附加進(jìn)度監(jiān)視器的輸入流,它監(jiān)視從流中讀取的內(nèi)容。您可以像使用Basic I/O中描述的任何其他輸入流一樣使用此流的實(shí)例 。您可以通過調(diào)用來獲取流的進(jìn)度監(jiān)視器,getProgressMonitor并按照如何使用進(jìn)度監(jiān)視器中的說明對(duì)其進(jìn)行配置。

在您看到正在運(yùn)行的進(jìn)度條和進(jìn)度監(jiān)視器后,決定是使用進(jìn)度條還是進(jìn)度監(jiān)視器可以幫助您確定哪個(gè)適合您的應(yīng)用程序。

使用確定的進(jìn)度條

這是一個(gè)小型演示應(yīng)用程序的圖片,它使用進(jìn)度條來測(cè)量在自己的線程中運(yùn)行的任務(wù)的進(jìn)度:

//聲明成員變量的地方:
JProgressBar 進(jìn)度條;
...
//GUI的構(gòu)建位置:
progressBar = new JProgressBar(0, task.getLengthOfTask());
進(jìn)度條.setValue(0);
progressBar.setStringPainted(true);

創(chuàng)建進(jìn)度條的構(gòu)造函數(shù)設(shè)置進(jìn)度條的最小值和最大值。您還可以使用setMinimum和設(shè)置這些值setMaximum。這個(gè)程序中使用的最小值和最大值是 0 和任務(wù)的長(zhǎng)度,這是許多程序和任務(wù)的典型特征。但是,進(jìn)度條的最小值和最大值可以是任何值,甚至是負(fù)值。該代碼段還將進(jìn)度條的當(dāng)前值設(shè)置為 0。

調(diào)用setStringPainted使進(jìn)度條在其范圍內(nèi)顯示已完成任務(wù)百分比的文本指示。默認(rèn)情況下,進(jìn)度條顯示其getPercentComplete方法返回的值,格式為百分比,例如33%。或者,您可以通過調(diào)用將默認(rèn)值替換為不同的字符串setString。例如,

if ( /*...完成一半...*/ )
    progressBar.setString("到了一半!");

當(dāng)用戶單擊StartTask時(shí),會(huì)創(chuàng)建并執(zhí)行內(nèi)部類的一個(gè)實(shí)例。

公共無效actionPerformed(ActionEvent evt){
    startButton.setEnabled(false);
    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
    完成=假;
    任務(wù)=新任務(wù)();
    task.addPropertyChangeListener(this);
    任務(wù).執(zhí)行();
}

Task的子類是 javax.swing.SwingWorker。該Task實(shí)例為 做三件重要的事情ProgressBarDemo:

該實(shí)例doInBackground在單獨(dú)的線程中調(diào)用 。這是實(shí)際執(zhí)行長(zhǎng)時(shí)間運(yùn)行的任務(wù)的地方。使用后臺(tái)線程而不是事件調(diào)度線程可以防止用戶界面在任務(wù)運(yùn)行時(shí)凍結(jié)。

當(dāng)后臺(tái)任務(wù)完成時(shí),實(shí)例調(diào)用done事件調(diào)度線程中的方法。

該實(shí)例維護(hù)一個(gè)綁定屬性 ,progress該屬性已更新以指示任務(wù)的進(jìn)度。propertyChange每次progress更改時(shí)都會(huì)調(diào)用該方法。

有關(guān) . _ _ _ SwingWorker_

后臺(tái)任務(wù)ProgressBarDemo通過以隨機(jī)間隔報(bào)告隨機(jī)進(jìn)度量來模擬真實(shí)任務(wù)。該方法通過更新進(jìn)度條propertyChange來響應(yīng)任務(wù)屬性的變化:progress

公共無效propertyChange(PropertyChangeEvent evt){
    如果(!完成){
        int 進(jìn)度 = task.getProgress();
        進(jìn)度條.setValue(進(jìn)度);
        taskOutput.append(String.format(
                "已完成 %d%% 的任務(wù)。\n", 進(jìn)度));
    }

后臺(tái)任務(wù)完成后,任務(wù)的done方法重置進(jìn)度條:

公共無效完成(){
    //告訴進(jìn)度監(jiān)聽器停止更新進(jìn)度條。
    完成=真;
    Toolkit.getDefaultToolkit().beep();
    startButton.setEnabled(true);
    設(shè)置游標(biāo)(空);//關(guān)閉等待光標(biāo)
    progressBar.setValue(progressBar.getMinimum());
    taskOutput.append("完成!\n");
}

請(qǐng)注意,該done方法將done字段設(shè)置為true,以防止propertyChange對(duì)進(jìn)度條進(jìn)行進(jìn)一步更新。這是必要的,因?yàn)閜rogress屬性的最終更新可能發(fā)生在done調(diào)用之后。

使用不確定模式

設(shè)置為ProgressBarDemo2不確定模式,直到實(shí)際進(jìn)度開始:

公共無效propertyChange(PropertyChangeEvent evt){
    如果(!完成){
        int 進(jìn)度 = task.getProgress();
        如果(進(jìn)度== 0){
            progressBar.setIndeterminate(true);
            taskOutput.append("還沒有進(jìn)展\n");
        } 別的 {
            progressBar.setIndeterminate(false);
            進(jìn)度條.setString(null);
            進(jìn)度條.setValue(進(jìn)度);
            taskOutput.append(String.format(
                    "已完成 %d%% 的任務(wù)。\n", 進(jìn)度));
        }
    }
}

代碼中的其他更改與字符串顯示有關(guān)。顯示字符串的進(jìn)度條可能比不顯示字符串的進(jìn)度條要高,并且,作為演示設(shè)計(jì)者,我們已經(jīng)武斷地決定該進(jìn)度條應(yīng)該僅在默認(rèn)的確定模式下顯示字符串。但是,我們希望避免在更改模式時(shí)進(jìn)度條更改高度可能導(dǎo)致的布局丑陋。因此,代碼保留在調(diào)用中,setStringPainted(true)但添加了調(diào)用,setString("")因此不會(huì)顯示任何文本。稍后,當(dāng)進(jìn)度條從不確定模式切換到確定模式時(shí),調(diào)用setString(null)會(huì)使進(jìn)度條顯示其默認(rèn)字符串。

我們沒有做的一項(xiàng)更改是progressBar.setValue從progress事件處理程序中刪除調(diào)用。該調(diào)用不會(huì)造成任何傷害,因?yàn)椴淮_定的進(jìn)度條不使用其 value 屬性,除非可能將其顯示在狀態(tài)字符串中。事實(shí)上,讓進(jìn)度條的數(shù)據(jù)盡可能保持最新是一種很好的做法,因?yàn)槟承┩庥^可能不支持不確定模式。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲一区欧美日韩 | 日本激情视频一区二区三区 | 99久久国产综合精品网成人影院 | 欧美一级成人影院免费的 | 亚洲精国产一区二区三区 | 亚洲成a人v大片在线观看 | 国产女人精品性视频 | 国语精品视频在线观看不卡 | 麻豆亚洲 | 国产精品国产高清国产专区 | 欧美综合精品一区二区三区 | 久久综合性 | 欧美精品一区二区三区视频 | 夜夜操网 | 亚洲天天做日日做天天看2018 | 国产福利一区二区三区在线视频 | 麻豆亚洲精品一区二区 | 欧美三级做爰在线 | 中国大陆一级毛片 免费 | 9热在线精品视频观看 | 久久久久久久国产精品 | 久久中文字幕一区二区 | 青青草免费视频在线播放 | 久久精品在线 | 老子影院午夜精品欧美视频 | 天天成人 | 色偷偷要色偷偷网站视频在线 | 欧美一级爱爱 | 欧美区一区 | 亚洲综合欧美日韩 | 精品国产一区二区在线观看 | 精品无码久久久久国产 | 亚洲欧美香蕉在线日韩精选 | 毛片免费全部免费观看 | 四虎永久成人免费 | 久久网页 | 国产中文字幕在线免费观看 | 欧美成人xx免费视频 | 在线不卡福利 | 国产激情一区二区三区 | 一级寡妇乱色毛片全18 |