進(jìn)度條可以在主程序之外的類中使用嗎?現(xiàn)在,我的主調(diào)用一個(gè)10行的gui。根據(jù)這些行中有多少行有文本,將調(diào)用9個(gè)類中的一個(gè)(兩行必須有文本)。被調(diào)用的類執(zhí)行我希望將進(jìn)度條綁定到的計(jì)算。下面是一個(gè)被調(diào)用類的示例(每個(gè)類相似,但不同到足以保證一個(gè)新類)。我認(rèn)為這個(gè)問題違反了EDT規(guī)則,但我在這些規(guī)則上看到的所有例子都涉及到一個(gè)主要的論點(diǎn)。運(yùn)行代碼時(shí)會(huì)出現(xiàn)框架,但直到所有計(jì)算完成后,進(jìn)度條才會(huì)更新。import java.awt.*;import java.awt.event.*;import javax.swing.*;public class twoLoan extends JFrame {
static JFrame progressFrame;
static JProgressBar progressBar;
static Container pane;
double amountSaved = 0;
int i = 0;
public void runCalcs(Double MP, Double StepAmt,
Double L1, Double L2, Double C1, Double C2,
Double IM1, Double IM2, Double M1Start, Double M2Start) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
int iterations = (int) (MP - (M1Start * M2Start));
//Create all components
progressFrame = new JFrame("Calculation Progress");
progressFrame.setSize(300, 100);
pane = progressFrame.getContentPane();
pane.setLayout(null);
progressFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
progressBar = new JProgressBar(0, iterations);
//Add components to pane
pane.add(progressBar);
//Position controls (X, Y, width, height)
progressBar.setBounds(10, 10, 280, 20);
//Make frame visible
progressFrame.setResizable(false); //No resize
progressFrame.setVisible(true);
double M1 = M1Start;
double M2 = M2Start;
// Set MinLoop as maximum to start
// Loan 1
double N1 = (Math.log10(1 - IM1 * L1 / M1) * -1) / Math.log10(1 + IM1);
double M1Sum = M1 * N1;
// Loan 2
double N2 = (Math.log10(1 - IM2 * L2 / M2) * -1) / Math.log10(1 + IM2);
double M2Sum = M2 * N2;
double minLoop = M1Sum + M2Sum;
double MTotal = 0;
3 回答

叮當(dāng)貓咪
TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
JFrame
Runnable
Runnable
SwingUtilities.invokeLater
將GUI位的創(chuàng)建移動(dòng)到一個(gè)方法中:
public void createComponents () { SwingUtilities.invokeLater(new Runnable() { public void run() { //Create all components progressFrame = new JFrame("Calculation Progress"); progressFrame.setSize(300, 100); pane = progressFrame.getContentPane(); pane.setLayout(null); progressFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); progressBar = new JProgressBar(0, iterations); //Add components to pane pane.add(progressBar); //Position controls (X, Y, width, height) progressBar.setBounds(10, 10, 280, 20); //Make frame visible progressFrame.setResizable(false); //No resize progressFrame.setVisible(true); } }); }
然后,我將對(duì)calc中的兩個(gè)GUI操作進(jìn)行處理:
private void updateProgressBar(final int i) { SwingUtilities.invokeLater(new Runnable() { public void run() { progressBar.setValue(i); //no need for the following //progressBar.repaint(); } }); } private void killDialog() { SwingUtilities.invokeLater(new Runnable() { public void run() { progressFrame.setVisible(false); } }); }
添加回答
舉報(bào)
0/150
提交
取消