Мне нужна помощь по нескольким вещам на 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, перейдите по этой ссылке Как сделать диалоги

Другие вопросы по тегам