Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос о панели / 7 сообщений из 7, страница 1 из 1
22.02.2007, 16:18:55
    #34350741
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о панели
Привет!
Есть программка которая делает некоторые действия в фоновом режиме, т.е. на экране в некоторые моменты ее работы ничего не отображается. Это я и хочу исправить. Моя идея - в отдельном потоке вывести на экран какую либо панель, поток будет отслеживать изменение состояния некоего флага, которое будет сигнализировать о моменте прекращения действий в фоновом режиме. В этот момент поток должен убрать созданную ранее в нем панель. Панель хотелось бы без функциональных кнопок (свернуть, закрыть...), но повесить на нее прогресс бар, показывающий текущую стадию выполнения.
Сам вопрос - каким классом воспользоваться для создания такой панели. Может у кого есть похожий примерчик, не первый же я с такой проблемой столкнулся :) У кого есть идеи - помогите, плиз!
...
Рейтинг: 0 / 0
22.02.2007, 16:54:18
    #34350832
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о панели
Dima11Панель хотелось бы без функциональных кнопок (свернуть, закрыть...), но повесить на нее прогресс бар, показывающий текущую стадию выполнения.
Сам вопрос - каким классом воспользоваться для создания такой панели.
JWindow
...
Рейтинг: 0 / 0
22.02.2007, 17:00:13
    #34350850
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о панели
Спасибо, а примерчик без лишних кнопок можно?
...
Рейтинг: 0 / 0
22.02.2007, 17:27:24
    #34350927
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о панели
Файл MainApp.java:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 import  java.awt.*;

/**
 * @author   Ruslan F. Isbarov
 * @version  1.0 (Feb 22, 2007)
 */
 public   class  MainApp {

     public   static   void  main(String[] args) {
        FloatPanel floatPanel =  new  FloatPanel();

        Rectangle screenRect = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
         int  screenWidth  = screenRect.width;
         int  screenHeight = screenRect.height;

         int  wndX = (screenWidth  - floatPanel.getWidth())  /  2 ;
         int  wndY = (screenHeight - floatPanel.getHeight()) /  2 ;

        floatPanel.setLocation(wndX, wndY);
        floatPanel.setVisible(true);

         try  {
            Thread.sleep( 10000 );
        }  catch  (InterruptedException e) {
            e.printStackTrace();
        }

        floatPanel.setVisible(false);
    }

}

Файл FloatPanel.java:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
 import  javax.swing.*;
 import  javax.swing.border.BevelBorder;

 import  java.awt.*;

/**
 * @author   Ruslan F. Isbarov
 * @version  1.0 (Feb 22, 2007)
 */

 public   class  FloatPanel  extends  JWindow {

     public  FloatPanel() {
        setLayout( new  BorderLayout());

        JPanel contentPanel =  new  JPanel();
        contentPanel.setLayout( new  BoxLayout(contentPanel, BoxLayout.Y_AXIS));
        contentPanel.setBorder( new  BevelBorder(BevelBorder.RAISED));

        JProgressBar progressBar =  new  JProgressBar();
        progressBar.setIndeterminate(true);

        contentPanel.add( new  JLabel("Please wait..."));
        contentPanel.add(progressBar);

        add(contentPanel, BorderLayout.CENTER);

        pack();

        // setAlwaysOnTop(true);
    }

}
...
Рейтинг: 0 / 0
22.02.2007, 18:53:36
    #34351122
DIMA11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о панели
Огромное спасибо! Это как раз то, что и было нужно :)
...
Рейтинг: 0 / 0
23.02.2007, 11:28:47
    #34351717
Arcadie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о панели
ненадо флага
если делать на сфинге то можа и нужа закидывать сообщения для компонента в очередь сообщений
компонент оттудова будет получать сообщения для себя и значения для прогресс бара и окончания процесса
воздействие наппрямую из дополнительного потока на сам компонент могет привести к блокировке
с синхронизацией могут быть траблы
лучше замутить JWindows, JFrame (контейнер кароче) в main
при нажатии кнопки листенер запускает отдельный процесс
иначе листенер забьет очередь
и соответственно твой новый поток влияет на данные компонента - ну там хоть прогресс бар - шо хошь через подачу сообщений-евентов методом EventQueue.invokeLater(....);
суть в том что пока листенер не завершит свою работу у тя прога будет мертвой
поэтому надо быстро в ем создать новый процесс, листенер завершит свою работу, обработчик событий будет далее пахать а влиять на компонент будещь через invokeLater
и будет те счастье
в примерах как бы листенера нету и нечем забивать поток-обработчик очереди
пахать будет
но при наваротах - как тока будет листенер - применяй invokeLater
...
Рейтинг: 0 / 0
23.02.2007, 11:37:20
    #34351727
Arcadie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос о панели
ваще все мифы о гружении сфинга именно отседова
пригружаем листенер и ессесено поток обработки сообщений и потом кричим - во хренова ... тармазит
а обработка событий не может пахать если ее пригрузили
главное быренько разгрузить поток обработки через создание нового потока и новвый поток будет влиять на компоненты через очередь событий
а если мы ее не загружаем то она у нас шустро пашет и все оки
не стоит забывать о синхронизации - в сфинге ее практически нема за искл пару методов - поетому и введено управление через поток событии
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос о панели / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]