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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2013, 17:31   #1
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию проблема с перерисовкой

Всё просто: при запуске программы не отображаются элементы на JPanel и нужно, к примеру, изменить размер окна чтобы они появились.
Вот проект нэтбинса:
x_Alex_x вне форума Ответить с цитированием
Старый 18.10.2013, 11:14   #2
codekick
Пользователь
 
Аватар для codekick
 
Регистрация: 15.01.2010
Сообщений: 28
По умолчанию

В нормальных условиях нечего такого с формой происходить не должно, если же ты рисуешь на форме например через JPanel.getGraphics(); элементы которые находятся на этой JPanel будет закрашены, что бы они появились тебе нужно вручную заставить их перепироваться (При перетакивании или изменении размера окна как раз происходит перерисовка всей формы) для этого нужно вызвать метод repaint() у каждого из элементов.
Программирование JavaEE/JavaSE
Платформы: Windows, Linux.
ICQ: 415253529; Skype: codekick;
codekick вне форума Ответить с цитированием
Старый 18.10.2013, 15:23   #3
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Прикол в том, что создаются эти элементы автоматически через визуальный редактор. Там-то должны были учесть их отрисовку.
Пробовал перерисовывать сам JPanel при его создании myPanel1.repaint(); - эффект нулевой.
x_Alex_x вне форума Ответить с цитированием
Старый 18.10.2013, 16:03   #4
codekick
Пользователь
 
Аватар для codekick
 
Регистрация: 15.01.2010
Сообщений: 28
По умолчанию

Под "визуальный редактор" ты имеешь ввиду дизайнер форм. Какой конретно ты используешь или он в Нетбинсе свой встроенный?
Программирование JavaEE/JavaSE
Платформы: Windows, Linux.
ICQ: 415253529; Skype: codekick;
codekick вне форума Ответить с цитированием
Старый 18.10.2013, 18:25   #5
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Да. Встроенный. Посмотри пожалуйста прогу так будет проще понять.
x_Alex_x вне форума Ответить с цитированием
Старый 18.10.2013, 20:00   #6
codekick
Пользователь
 
Аватар для codekick
 
Регистрация: 15.01.2010
Сообщений: 28
По умолчанию

Решено. Вызови setVisible у главного окна после того как добавить туда панель.

Код:
public class Picmen extends JFrame{
    public Picmen(){//Главное окно
        this.setTitle("Главное окно");
        this.setSize(800, 600);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    
    public static void main(String[] args) {
        Picmen P = new Picmen();
        JPanel f = new NewJPanel();
        P.add(f);
        P.setVisible(true);
    }
}
Например: ты же не делаешь setVisible у jSlider1 или JTextEdit1 поскольку они дочерние компоненты и будет показаны вместе с родительским фреймом.
в случае с окном и его панелью тоже самое.

И вообще зачем так все городить создай одну форму сразу с этой панелью и всем чем надо.
Программирование JavaEE/JavaSE
Платформы: Windows, Linux.
ICQ: 415253529; Skype: codekick;

Последний раз редактировалось codekick; 18.10.2013 в 20:02.
codekick вне форума Ответить с цитированием
Старый 18.10.2013, 20:57   #7
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Спасибо, я понял!
Цитата:
зачем так все городить
джаву я ещё не знаю и пока просто разбираюсь чё да как.

А как теперь сделать, чтобы при перемещении ползунка перерисовывалось число?
Нужно перерисовать только текстовое поле. jTextField1.repaint(); само по себе результата не дало.
x_Alex_x вне форума Ответить с цитированием
Старый 18.10.2013, 21:23   #8
codekick
Пользователь
 
Аватар для codekick
 
Регистрация: 15.01.2010
Сообщений: 28
По умолчанию

Тебе нужно использовать не addAncestorListener, а addChangeListener

Код:
jSlider1.addChangeListener(new ChangeListener(){
			@Override
			public void stateChanged(ChangeEvent arg0) {
				jSlider1AncestorMoved();	
			}
        });
Дело тут не прорисовке или перерисовки тут это ваще не имеет никакого отношения к делу, просто я поначалу подумал что бы рисуешь графику на панели. Ты просто добаввил слушателя не на то событие.
Программирование JavaEE/JavaSE
Платформы: Windows, Linux.
ICQ: 415253529; Skype: codekick;
codekick вне форума Ответить с цитированием
Старый 18.10.2013, 22:28   #9
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Нашёл ещё такой код:

Listening for Value Changes in a JSlider Component
Код:
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Main {
  public static void main(String[] argv) throws Exception {
    JSlider slider = new JSlider();
    slider.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent evt) {
        JSlider slider = (JSlider) evt.getSource();
        if (!slider.getValueIsAdjusting()) {
          int value = slider.getValue();
          System.out.println(value);
        }
      }
    });
  }
}
тут addChangeListener добавляется после создания ползунка. А у меня такой код с addAncestorListener генерируется автоматически в initComponents() и не даёт себя менять.
x_Alex_x вне форума Ответить с цитированием
Старый 18.10.2013, 22:40   #10
codekick
Пользователь
 
Аватар для codekick
 
Регистрация: 15.01.2010
Сообщений: 28
По умолчанию

Не стоит юзать код если ты не понимаешь до конца как работает, да этот пример тоже будет работать, но в твоем случае он избыточен. Проанализируй все варианты и выбери какой нибуть.
Попытайся разобраться что делает каждая строка. И судя по твоим вопросам у тебя мало опыта не только в Java, но и в программировании вообще, поэтому не стоит сразу пытаться сделать идеально и красиво, делай как можешь, потом всегда можно улучшить, и меньше копипасть с гугла, думай сам. Успехов :-)
Программирование JavaEE/JavaSE
Платформы: Windows, Linux.
ICQ: 415253529; Skype: codekick;
codekick вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неблокирующий сокет Си проблема с закрытием, проблема с закрытием сокетов в цикле mnx_vol C/C++ Сетевое программирование 0 06.11.2012 13:57
Проблема с перерисовкой графика ajax запросом masterbloger PHP 0 09.06.2011 12:41
Посоветуйте с перерисовкой Sasha9132 Общие вопросы по Java, Java SE, Kotlin 3 26.11.2010 16:54
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37