Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2014, 13:01   #1
Buckac0
 
Регистрация: 12.05.2014
Сообщений: 3
По умолчанию Изменить значение JProgressBar из другого класса

Здравствуйте форумчане.
Запрашиваю вашу помощь, не могу разобраться с JProgressBar.
Обгуглил множество статей и форумов, но везде одно и то же.
Определение экземпляра класса JProgressBar и его использование происходит в одном и том же классе.

Например:
Код:
import java.awt.event.*;
import javax.swing.*;
 
public class Main extends JFrame {
 
    private JProgressBar progressBar;
    private JTextField field;
    /*
    Прочие элементы
    */
    
 
    public static void main(String[] args) {
        new Main().setVisible(true);
    }
    
    public Main() {
        progressBar = new JProgressBar();
        JPanel panel = new JPanel();
        JButton button = new JButton("Поехали");
        
        button.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                calculate();            
            }
        });
        
        panel.add(button);
        panel.add(progressBar);
        add(panel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public void calculate() {
        Runnable runnable = new Runnable() {
            
            @Override
            public void run() {
                for (int i=0; i<300; i++) {
                    try {
                        Thread.sleep(30);
                        progressBar.setValue(progressBar.getValue() + 1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        new Thread(runnable).start();
    }
}
Как я могу менять значение прогресс бара, если метод calculate() вынести в отдельный класс и добавить ему модификатор static?
Рекомендуют пользоваться SwingUtilites и SwingWorker, но все примеры, что я нашел, так же приводятся в одном и том же классе.
Buckac0 вне форума Ответить с цитированием
Старый 16.05.2014, 09:18   #2
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Сообщений: 104
По умолчанию

Может так?
Код:
 
static public void calculate(JProgressBar bar) {
   bar.setValue(value);
}
В java передается ссылка по значению, а не объект.
ultimatet41 вне форума Ответить с цитированием
Старый 19.05.2014, 11:25   #3
Buckac0
 
Регистрация: 12.05.2014
Сообщений: 3
По умолчанию

Получается, что только ради того, что бы красиво отображать выполнение процесса в JProgressBar, в каждый мой метод, который может быть вовсе не относится к библиотеке swing и не предполагает её наличие (может быть использован в консоли), необходимо добавлять параметр типа JProgressBar?
Видимо я не совсем правильно задал вопрос.
Это не обязательно JProgressBar.
А что если я захочу использовать ProgressBar из другой библиотеки?
Или допустим, я создал свой класс, который отображает выполнение процесса в консоли, в виде бегущей стрелки, например?
Есть какие-нибудь альтернативы, например как в Си, отправка "сообщения, события" прогресс бару от выполнении процесса?
Наверное, я не до конца понимаю механизмы работы подобных процессов и грамотное написание многопоточного взаимодействия GUI элементов.

Последний раз редактировалось Buckac0; 19.05.2014 в 12:03.
Buckac0 вне форума Ответить с цитированием
Старый 19.05.2014, 11:53   #4
Buckac0
 
Регистрация: 12.05.2014
Сообщений: 3
По умолчанию

Тогда лучше задам вопрос по другому.
У меня есть класс в котором используется статический метод, данный метод "знает" сколько он будет выполнятся, или же просто имеет переменную в процентах от 0 до 100 (или еще проще, считает от 0 до 100), которая отображает ход выполнения процесса, мне надо передавать информацию о ходе выполнения в элемент JProgressBar (либо любой другой элемент отображающий выполнения процесса), и делать это так, что бы интерфейс не зависал.
Еще раз говорю мой метод статический, он вообще в отдельном пакете, используется в другом классе, который не имеет отношения к GUI.

Или же программисты используют другие механизмы и приемы для отображения прогресса выполнения?

Последний раз редактировалось Buckac0; 19.05.2014 в 12:02.
Buckac0 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Builder обращение к методу класса из другого класса Astat Помощь студентам 2 20.01.2013 17:59
Доступ к полю класса из другого поля это класса NaumOff Общие вопросы Delphi 10 09.10.2012 09:53
Конструктор класса не хочет принимать в качестве параметра адрес объекта другого класса Jugger Помощь студентам 3 05.01.2012 04:10
получить значение поля другого класса Roof Общие вопросы Delphi 11 10.09.2010 15:10
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54