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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java進度條的使用

Java進度條的使用

更新時間:2022-10-31 10:09:17 來源:動力節點 瀏覽2562次

如何使用進度條

有時,在程序中運行的任務可能需要一段時間才能完成。用戶友好的程序向用戶提供一些指示,表明任務正在發生、任務可能需要多長時間以及已經完成了多少工作。一種表示工作的方式,也許是進度量,是使用動畫圖像。

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

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

要傳達任務的完成程度,您可以使用如下進度條:

有時您無法立即確定長時間運行的任務的長度,或者該任務可能會長時間停留在相同的完成狀態。您可以通過將進度條置于不確定模式來顯示沒有可測量進度的工作。不確定模式下的進度條會顯示動畫以指示工作正在進行。一旦進度條可以顯示更有意義的信息,您應該將其切換回其默認的確定模式。在 Java 外觀中,不確定的進度條如下所示:

Swing 提供了三個類來幫助您使用進度條:

JProgressBar

一個可視組件,以圖形方式顯示總任務已完成多少。使用不確定模式部分告訴您如何在任務范圍已知之前為進度條設置動畫以顯示活動。

ProgressMonitor

不是可見組件。相反,此類的一個實例監視任務的進度并在必要時彈出一個對話框。

ProgressMonitorInputStream

帶有附加進度監視器的輸入流,它監視從流中讀取的內容。您可以像使用Basic I/O中描述的任何其他輸入流一樣使用此流的實例 。您可以通過調用來獲取流的進度監視器,getProgressMonitor并按照如何使用進度監視器中的說明對其進行配置。

在您看到正在運行的進度條和進度監視器后,決定是使用進度條還是進度監視器可以幫助您確定哪個適合您的應用程序。

使用確定的進度條

這是一個小型演示應用程序的圖片,它使用進度條來測量在自己的線程中運行的任務的進度:

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

創建進度條的構造函數設置進度條的最小值和最大值。您還可以使用setMinimum和設置這些值setMaximum。這個程序中使用的最小值和最大值是 0 和任務的長度,這是許多程序和任務的典型特征。但是,進度條的最小值和最大值可以是任何值,甚至是負值。該代碼段還將進度條的當前值設置為 0。

調用setStringPainted使進度條在其范圍內顯示已完成任務百分比的文本指示。默認情況下,進度條顯示其getPercentComplete方法返回的值,格式為百分比,例如33%?;蛘撸梢酝ㄟ^調用將默認值替換為不同的字符串setString。例如,

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

當用戶單擊StartTask時,會創建并執行內部類的一個實例。

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

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

該實例doInBackground在單獨的線程中調用 。這是實際執行長時間運行的任務的地方。使用后臺線程而不是事件調度線程可以防止用戶界面在任務運行時凍結。

當后臺任務完成時,實例調用done事件調度線程中的方法。

該實例維護一個綁定屬性 ,progress該屬性已更新以指示任務的進度。propertyChange每次progress更改時都會調用該方法。

有關 . _ _ _ SwingWorker_

后臺任務ProgressBarDemo通過以隨機間隔報告隨機進度量來模擬真實任務。該方法通過更新進度條propertyChange來響應任務屬性的變化:progress

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

后臺任務完成后,任務的done方法重置進度條:

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

請注意,該done方法將done字段設置為true,以防止propertyChange對進度條進行進一步更新。這是必要的,因為progress屬性的最終更新可能發生在done調用之后。

使用不確定模式

設置為ProgressBarDemo2不確定模式,直到實際進度開始:

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

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

我們沒有做的一項更改是progressBar.setValue從progress事件處理程序中刪除調用。該調用不會造成任何傷害,因為不確定的進度條不使用其 value 屬性,除非可能將其顯示在狀態字符串中。事實上,讓進度條的數據盡可能保持最新是一種很好的做法,因為某些外觀可能不支持不確定模式。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲国产精品免费视频 | 97色伦影院| 男人的天堂免费在线观看 | 色网站在线观看 | 国产亚洲精品热视频在线观看 | 成年女人毛片免费视频 | 国产专区自拍 | 四虎永久免费最新在线 | 中文亚洲日韩欧美 | 亚洲精品人成网线在线 | 成人网在线看 | 午夜欧美性欧美 | 国产日韩在线看 | 性做久久久久免费看 | 精品久久久久久久中文字幕 | 久久久综合色 | 欧美高清免费精品国产自 | 中文字幕视频免费在线观看 | 久久99国产精品视频 | 亚洲一区二区三区在线网站 | 日韩欧美精品综合一区二区三区 | 国产精品亚洲欧美日韩区 | 老司机午夜精品视频播放 | 亚洲精品一二三区-久久 | 狠狠操天天操视频 | 四虎永久免费 | 久久国产乱子伦精品免 | 国产91嫩草精品 | 色婷婷精品综合久久狠狠 | 国内精品久久久久影院不卡 | 欧洲成人免费高清视频 | 涩涩视频免费 | 中文字幕亚洲在线 | 日日噜噜夜夜狠视频免费 | 99综合在线 | 香蕉视频一区二区 | 欧美成人免费一级人片 | 一级国产20岁美女毛片 | 欧洲一级毛片免费 | 一级特级欧美a毛片免费 | 欧美在线视频网站 |