Мне нужна помощь по нескольким вещам на Java JFrame
Я создал этот код прогресса и теперь хочу, чтобы он автоматически закрывался после перехода на 100%, а также открывал новый фрейм с текстом во фрейме. Так как мне это сделать?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
class Progress extends JFrame implements ActionListener {
JProgressBar pb;
JButton b1;
Progress() {
super("Progress");
setLayout(null);
b1 = new JButton("Start");
b1.setBackground(Color.LIGHT_GRAY);
pb = new JProgressBar(1,100);
pb.setValue(0);
pb.setStringPainted(true);
pb.setForeground(Color.green);
pb.setBackground(Color.pink);
b1.setBounds(20, 20, 80, 25);
pb.setBounds(110, 20, 200, 25);
pb.setVisible(false);
add(b1);
add(pb);
b1.addActionListener(this);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
int i=0;
if(e.getSource()==b1) {
pb.setVisible(true);
try {
while(i<=100) {
Thread.sleep(50);
pb.paintImmediately(0, 0, 200, 25);
pb.setValue(i);
i++;
}
} catch(Exception e1) {
System.out.print("Caughted exception is ="+e1);
}
}
}
public static void main(String arg[]) {
logindemo m=new logindemo();
m.setSize(400,250);
m.setVisible(true);
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - m.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - m.getHeight()) / 2);
m.setLocation(x, y);
}
}
Это код для моего индикатора прогресса.
1 ответ
Так что вещь перед ответом.
Индикатор
В вашем коде, в то время как прогресс увеличивается, остальное приложение заморожено. Если вы хотите избежать этого, хорошо иметь прогресс-код в другом потоке. Но не забудьте использовать SwingWorker вместо классических потоков.
Также прочитайте, что Эндрю Томпсон упомянул в своих комментариях.
Чтобы "закрыть" или, вернее, скрыть основной фрейм, вы можете вызвать один из этих методов.
setVisible(false);
или же
dispose();
Чтобы открыть новое окно / рамку или что-то еще, вы должны поместить его после цикла while. Вы можете проверить это с помощью приведенного ниже кода, просто добавьте этот метод в ваш класс и вызовите его после цикла.
private void dialogMessage() {
Object[] options = {"OK"};
int result = JOptionPane.showOptionDialog(this,
"Done!", "",
JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE,
null,
options,
options[0]);
if (result == JOptionPane.OK_OPTION) {
System.exit(0);
}
}
Чтобы узнать больше о JOptionPane, перейдите по этой ссылке Как сделать диалоги