자바 스윙 구성 요소 진행 감시 기능 예시
실례 1:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ProgressMonitor;
import javax.swing.Timer;
public class TestProgressMonitor {
Timer timer;
public void init() {
final SimulatedTargetMi target = new SimulatedTargetMi(1000);
//
final Thread targetThread = new Thread(target);
targetThread.start();
//
final ProgressMonitor dialog = new ProgressMonitor(null,
" , , ...", " :0.00%", 0,
target.getAmount());
//
timer = new Timer(300, new ActionListener() {
public void actionPerformed(ActionEvent e) {
//
dialog.setProgress(target.getCurrent());
dialog.setNote(" :" + target.getPercent());
// ” “
if (dialog.isCanceled()) {
//
timer.stop();
//
targetThread.interrupt();
//
System.exit(0);
}
}
});
timer.start();
}
public static void main(String[] args) {
new TestProgressMonitor().init();
}
}
//
class SimulatedTargetMi implements Runnable {
//
private volatile int current;
//
private int amount;
public SimulatedTargetMi(int amount) {
current = 0;
this.amount = amount;
}
public int getAmount() {
return amount;
}
public int getCurrent() {
return current;
}
// run
public void run() {
while (current < amount) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
current++;
}
}
public String getPercent() {
return String.format("%.2f", 100.0 * current / amount) + "%";
}
}
실행 효과:실례 2:
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.Timer;
public class TestJProgressBar {
JFrame frame = new JFrame("www.jb51.net - ...");
//
JProgressBar bar = new JProgressBar(JProgressBar.HORIZONTAL);
JLabel tipLabel = new JLabel(" :", JLabel.LEFT);
JLabel contentLabel = new JLabel(" , ...", JLabel.LEFT);
JLabel statusLabel = new JLabel(" ", JLabel.CENTER);
public void init() {
frame.setLayout(new FlowLayout());
frame.setResizable(false);
tipLabel.setFont(new Font("Serif", Font.PLAIN, 14));
contentLabel.setFont(new Font("Serif", Font.PLAIN, 14));
statusLabel.setFont(new Font("Serif", Font.PLAIN, 14));
JPanel panel = new JPanel();
// fr5.setBorder(new TitledBorder("BoxLayout - Y"));
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(tipLabel);
panel.add(Box.createVerticalStrut(2));
panel.add(contentLabel);
panel.add(Box.createVerticalStrut(7));
panel.add(bar);
// panel.add(Box.createVerticalGlue());
panel.add(Box.createVerticalStrut(2));
panel.add(statusLabel);
frame.add(panel, 0);
final SimulatedTarget target = new SimulatedTarget(1000);
//
final Thread thread = new Thread(target);
thread.start();
//
bar.setStringPainted(true);
// bar.setPreferredSize(new Dimension(100, 18));
// ,
bar.setMinimum(0);
//
bar.setMaximum(target.getAmount());
final Timer timer = new Timer(300, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// value
bar.setValue(target.getCurrent());
if (target.getAmount() <= target.getCurrent()) {
statusLabel.setText(" ,oh yes!");
}
}
});
timer.start();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
thread.interrupt();
timer.stop();
//
System.exit(0);
}
});
//
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new TestJProgressBar().init();
}
}
//
class SimulatedTarget implements Runnable {
//
private volatile int current;
//
private int amount;
public SimulatedTarget(int amount) {
current = 0;
this.amount = amount;
}
public int getAmount() {
return amount;
}
public int getCurrent() {
return current;
}
// run
public void run() {
while (current < amount) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
}
current++;
}
}
public String getPercent() {
return String.format("%.1f", 100.0 * current / amount) + "%";
}
}
실행 결과:자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.