Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отрисовка панелей на фрейме, как правильно разместить на фрейме панел 
:(
    Опции темы
Scarlett
Дата 4.1.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



возникла проблема при работе с панелями
суть такая, что есть две панели
одна всегда должна быть видна, а другая при уменьшении размера должна быть в скроллинге
когда происходит уменьшение размера окна с нижней границы болле менее нормально
но при передвижении правой границы правая панель накладывается на все и получаются глюки
привожу код:
код создания главной панели, которая будет помещаться на фрейм:
        
Код

EmptyBorder eb = new EmptyBorder(5,5,5,5);
        BevelBorder bb = new BevelBorder(BevelBorder.LOWERED);
        CompoundBorder cb = new CompoundBorder(eb,bb);
        this.setBorder(new CompoundBorder(cb,eb));

        //первая панель
        BoardPanel gameBoard = new BoardPanel(colCount, rowCount);
        JScrollPane boardView = new JScrollPane(gameBoard);
        boardView.setPreferredSize(
            new Dimension(LEFT_WIDTH, WINDOW_HEIGHT));
       
       //вторая панель
       ToolsPanel settingTools = new ToolsPanel(gameControl, frame);
        settingTools.setPreferredSize(
                new Dimension(RIGHT_WIDTH, WINDOW_HEIGHT));

        // Add GUI components
        this.setLayout(new BorderLayout());
        this.add(settingTools, BorderLayout.EAST);
        this.add(boardView, BorderLayout.CENTER);


буду рада если кто-то поможет или объяснит

PM MAIL   Вверх
powerOn
Дата 4.1.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Совершенно не понятно в чем проблема. Выложите код который можно запустить и посмотреть собственными глазами что не так.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Foo
Дата 5.1.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 20.10.2006

Репутация: 2
Всего: 3



если телепатически, то может быть проблема в boardView.setMinSize(). Попробуй сделать его 0.
--------------------
qip
PM MAIL   Вверх
Scarlett
Дата 5.1.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



оказалось, что проблема возникает, когда я добавляю вторую панель
если она стандартная - JPanel, то все нормально
если же со всеми компонентами и лейотами, то возникает проблема.
я написала простенький пример, только с этими компонентами
выкладывают источник

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  gui_panel.java 9,09 Kb
PM MAIL   Вверх
Scarlett
Дата 5.1.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



при последующем исследовании оказалось, что в панели tools, если добавлять на ее уровень панель с одним компонентом, то она работает нормально. если же количество компонентов на такой панели увеличивается, то происходят глюки
есть ли тогда ограничение на количество компонентов, которые можно размещать в контейнере и уровней вложенности?
если да, то какие?
спасибо.
PM MAIL   Вверх
Foo
Дата 5.1.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 20.10.2006

Репутация: 2
Всего: 3



у меня вроде все нормально отображается... Правая целая, на левой при уменьшении появляется скролл...
--------------------
qip
PM MAIL   Вверх
Scarlett
Дата 5.1.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



даже если уменьшается размер за правую границу фрейма до самого минимального?
правая панель всегда остается целой?

тогда я ничего не понимаю...
у меня как ни крути возникают проблемы.
при этом как только добавляется компонент справа
получается своего рода такой рисунок


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  temp.JPG 9,79 Kb
PM MAIL   Вверх
powerOn
Дата 5.1.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Нормальный глюк.   smile  ИМХО, вполне логичный: сначало идет прорисовка контейнера, потом рамки контейнера, а только потом рисуются подкомпоненты. 
Что видно в исходниках javax.swing.JCompenent
Код

public void paint(Graphics g) {
................
else {
        // Will ocassionaly happen in 1.2, especially when printing.
        if (clipRect == null) {
            co.setClip(clipX, clipY, clipW, clipH);
        }
                // Вот оно!! Сначало рисуем компонет и и рамку, только потом (см. ниже)
                if (!rectangleIsObscured(clipX,clipY,clipW,clipH)) {
            if (!printing) {
            paintComponent(co);
            paintBorder(co);
            }
            else {
            printComponent(co);
            printBorder(co);
            }
                }
                // Рисуем подкомпоненты.
        if (!printing) {
            paintChildren(co);
        }
        else {
            printChildren(co);
        }
            }
...............
}


В вашем случае все усугубилось тем фактом, что компонент находящийся в BorderLayout.EAST не меняет размеров по ширине. Так видимо задумано его разработчиками. Поэтому при сжатии фрайма по ширине, он (компонент) просто заежает за экран совершенно не считаясь с наличием рамки у своего контейнера....  В результате происходит такой неприятный эффект... smile 

Что я Вам могу предложить в этой ситуации? Так это не использовать рамку для верхней панели:
Код

  public gui_panel() {
        // Make a nice border
        EmptyBorder eb = new EmptyBorder(5,5,5,5);
        BevelBorder bb = new BevelBorder(BevelBorder.LOWERED);
        CompoundBorder cb = new CompoundBorder(eb,bb);
 // Без рамки выглядит лучше.
  //      this.setBorder(new CompoundBorder(cb,eb));


 smile 

Это сообщение отредактировал(а) powerOn - 5.1.2007, 20:09


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Scarlett
Дата 5.1.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



в данном случае здесь главное даже не то, что происходит заезжание за рамку
необходимо, чтобы правая панель была видна полностью
а левая в скроллинге
т.е.  должно быть всегда видно, что они есть.

возможно, что все дело в минимальном размере фрейма. 
можно ли его как-то установить. т.е. сделать таким, после чего дальнейшее уменьшение размера не предусматривалось?
PM MAIL   Вверх
powerOn
Дата 5.1.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(Scarlett @  5.1.2007,  20:15 Найти цитируемый пост)
возможно, что все дело в минимальном размере фрейма. 
можно ли его как-то установить. т.е. сделать таким, после чего дальнейшее уменьшение размера не предусматривалось? 

Минимальный размер фрейма хочешь задать? начни отсюда.

Цитата(Scarlett @  5.1.2007,  20:15 Найти цитируемый пост)
т.е.  должно быть всегда видно, что они есть.

тут скроре всего нужно поиграть с другими менеджерами расположений. Поскольку BorderLayout гнет центральный компонент как хочет, несмотря на все setMinimumSize() и setPriferredSize().  smile 



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Scarlett
Дата 5.1.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



я уже тогда решила отслеживать изменение размера фрейма
и если он меньше моего минимального, тогда устанавливать свой минимальный
дело в том, что какой я менеджер бы не использовала
если окно меньше, то то, что нужно, не видно, а это не соответствует задаче

сейчас посмотрю то, что ты мне скинул
спасибо за попытку помочь smile

Добавлено @ 21:43 
оказалось, что я правильно минимальный размер отслеживаю smile

спасибо.

Добавлено @ 21:43 
пока не помечаю как решенный, если пройдет тогда отмечу ;)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0729 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.