Как сделать что бы работал прогресс бар в модальном окне?
Ибо пока не закрою диалог, код дальше не выполняется.
Сделал такой пример:
package testModalProgressBar;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
public class MainClass {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createFrame();
}
});
}
private static void createFrame() {
JFrame frame = new JFrame("main frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(250, 70));
JButton bt = new JButton("клац");
frame.getContentPane().add(bt);
frame.pack();
frame.setVisible(true);
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ModalProgressBar mpb = new ModalProgressBar(10);
for(int i = 0; i < 10; i++) {
try {
Thread.sleep(150);
} catch (InterruptedException e) {e.printStackTrace();}
mpb.inc();
System.out.println(i);
}
mpb.close();
}
});
}
}
class ModalProgressBar extends JDialog {
private static final long serialVersionUID = 1L;
private JProgressBar jpb;
public ModalProgressBar(int max) {
super();
setTitle("Прогресс...");
setModal(true);
jpb = new JProgressBar(0, max);
add(BorderLayout.CENTER, jpb);
//setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
setSize(250, 50);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
}
public void inc() {
jpb.setValue(jpb.getValue()+1);
}
public void close() {
setVisible(false);
dispose();
}
}
Не могу сообразить, так что в данном случае делать с потоками? Как с помощью них это распараллелить?
UPD: Придумал такой вариант, но он не красивый:
private static void createFrame() {
JFrame frame = new JFrame("main frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(250, 70));
JButton bt = new JButton("клац");
frame.getContentPane().add(bt);
frame.pack();
frame.setVisible(true);
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ModalProgressBar mpb = new ModalProgressBar(49);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 50; i++) {
try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}
mpb.inc();
System.out.println(i);
}
mpb.close();
}
});
t.start();
mpb.setVisible(true);
}
});
}
}
class ModalProgressBar extends JDialog {
private static final long serialVersionUID = 1L;
private JProgressBar jpb;
public ModalProgressBar(int max) {
super();
setTitle("Прогресс...");
setModal(true);
jpb = new JProgressBar(0, max);
jpb.setStringPainted(true);
add(BorderLayout.CENTER, jpb);
//setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
setSize(250, 47);
setResizable(false);
setLocationRelativeTo(null);
//setVisible(true);
}
public void inc() {
jpb.setValue(jpb.getValue()+1);
}
public void close() {
setVisible(false);
dispose();
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Мне нужно конвертировать дату, хранящуюся в переменной типа LocalDateTime в формате (год,месяц,день,час,минута) в формат миллисекунд, прошедших...
Привет друзья! Как в VK API сделать свою активити с логином как показано на рисунке 2?
Как сделать что бы данная строка не прерывала вывод в консоль, но при этом продолжала записывать в файл
Возможно ли добавить макрос в Excel файл динамически, с помощью java-кода, и выполнить его так же?