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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пропала отрисовка, Проблемы с собственным модулем 
V
    Опции темы
popov654
  Дата 31.1.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!
Помогите пожалуйста, я новичок, в рисовании и Swing разбираюсь не очень, хотя вот это попытался осилить: http://www.skipy.ru/technics/gui_int.html
Правда, ответа там не нашёл. Такая странная проблема: я создал свой класс, наследующий JLabel. Тупой класс, счётчик итераций. Его задача - выводить цифорку нужным шрифтом в красивой рамочке с заголовком, и контролировать изменение значений (я правда "родные" методы переопределять не стал, лишь добавил свои). И второй похожий класс, но он выводит название алгоритма (строку) и другим цветом.

Сперва я очень долго мучался, пытаясь разместить в нужной позиции эти виджеты. Мне нужно было, чтобы они "привязывались" к правой границе окна, банальный setBounds() это сделать не позволял. Тогда я решил влезть в блок сгенерированного NetBeans кода и прописать туда ручками нужную установку, модифицировав метод initComponents(). Почему я туда полез, а не стал размещать свои объекты сам? Потому что там вот такой код:

Код

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
              .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(algNameWidget, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(itWidget, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(27, 27, 27)
                        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 60, Short.MAX_VALUE)
                        .addComponent(logOnly)))
                .addGap(64, 64, 64))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(478, Short.MAX_VALUE)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(57, 57, 57))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(18, 18, 18)
            .addComponent(algNameWidget, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(13, 13, 13)
                .addComponent(itWidget, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(15, 15, 15)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(155, 155, 155)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(logOnly))
                .addContainerGap())
        );



Честно говоря, я побоялся внедрять свои объекты отдельно, тем более не понимая толком, что делаю. Копировать же половину метода initComponents() мне тоже совершенно не хотелось.

И мне всё удалось как я хотел. Но подлянка заключалась в том, что IDE при первых же действиях в визуальном редакторе после сохранения результатов весь мой добавленный код затирала. После третьего раза я догадался сохранить код в текстовый файл, но я умучался каждый раз вручную копипастить его содержимое.

Ещё до этого я пытался вставить свои объекты в служебный файл .form, но среда страшно ругалась и открывала форму в режиме Read-Only.

Тогда я покопался в хелпах и узнал, что компоненты можно импортировать на палитру. Ура - подумал я, и принялся за дело. Даже отказался от паттерна Singleton и приватного конструктора (который впрочем был нафиг не нужен  smile ). Импортировал, вставил на панель, отровнял как хотел. Вы думаете, это всё?

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

То есть может, свойство и меняется, но компоненты не перерисовываются. Или наоборот. Но как бы то ни было, на экране всё глухо.

Что делать, как лечить?..  smile 

Это сообщение отредактировал(а) popov654 - 31.1.2011, 10:18
PM MAIL   Вверх
aleksandy
Дата 31.1.2011, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ты бы лучше картинки показал: как есть и как надо. Или код полный привел.
PM   Вверх
popov654
  Дата 31.1.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё, проблема решена.
Ошибка была в том, что я в конструкторе главного большого класса, уже после вызова стандартного initComponents(), где всё создаётся и размещается в контейнере, сказал:

Код

algNameWidget = new TitleWidget();
itWidget = new IterationWidget();


Я сейчас проверил - догадка оказалась верна: графический контекст, который я пытался использовать при переопределении paint(), paintComponent() и чего-то ещё (я даже пытался надпись "ручками" рисовать через Graphics2D  smile ), был null, т. к. новый объект не отображался на экране. Поэтому всё моё рисование не имело никакого эффекта.

Добавлено через 1 минуту и 26 секунд
И да, свойство действительно изменялось  smile 
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.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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