Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JTabbedPane не перерисовывается по таймеру / 13 сообщений из 13, страница 1 из 1
13.09.2016, 11:28
    #39308245
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Дано: таблица, которая должна перерисовываться по таймеру
Если создавать таблицу, помещать ее на скроллинг панель и добавлять в окно, все работает.

Код: java
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.
34.
35.
36.
37.
38.
39.
40.
41.
 java.util.Timer timer2 = new java.util.Timer();
	    TimerTask task = new TimerTask() {
	      public void run()
	      {
	    	   
	    	     TablePanel[0] = new JPanel();
	   
	    	    long curTime = System.currentTimeMillis()+3600000; 
	    	    String curStringDate = new SimpleDateFormat("hh.mm.ss").format(curTime);
	      		 // создадим и заполним динамическую таблицу   
	    		    Vector<String> headerVect = new Vector<String>();
	    		      headerVect.add("Aa");
	    		      headerVect.add("Bb");
	    		      headerVect.add("Cc");
	    		      headerVect.add("Dd");
	    		      DefaultTableModel mod = new DefaultTableModel(headerVect, 0);
	    		      table[0] = new JTable();
	    		      table[0].setModel(mod);
	    		      for(int i=0;i<3;i++)
	    		      {Vector<String> newRow = new Vector<String>();
	    		      newRow.add("time: "+curStringDate);
	    		      newRow.add("BbValue"+i);
	    		      newRow.add("CcValue"+i);
	    		      newRow.add("DdValue"+i);
	    		      mod.addRow(newRow);
	    		      }	      
	    		      scrollPane[0] = new JScrollPane(table[0]);
	    	          TablePanel[0].add(scrollPane[0]);
	    	          
	    	          /////////////////////////////////////////////////
	    	          // так работает
	    	          // добавляем панель в окно
	    	          add(TablePanel[0]);
	    	          validate();
	    	         ///////////////////////////////////////////////////////////////////////
	    	          
	    
	      }
	    }; // end Timer Task
	    timer2.schedule( task, 1000,2000 );
	    


Если же нужно разместить данные на вкладке, то таблица выводится, но не обновляется по таймеру:

Код: java
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
java.util.Timer timer2 = new java.util.Timer();
	    TimerTask task = new TimerTask() {
	      public void run()
	      {
	    	   jtp = new JTabbedPane();
	    	   getContentPane().add(jtp);
	    	     TablePanel[0] = new JPanel();
	    	    // берем системное время и прибавляем час, тк не устанавливали обновления часовых поясов
	    	    long curTime = System.currentTimeMillis()+3600000; 
	    	    String curStringDate = new SimpleDateFormat("hh.mm.ss").format(curTime);
	    	    //dd.MM.yyyy hh.mm.ss
	    		 // создадим и заполним динамическую таблицу   
	    		    Vector<String> headerVect = new Vector<String>();
	    		      headerVect.add("Aa");
	    		      headerVect.add("Bb");
	    		      headerVect.add("Cc");
	    		      headerVect.add("Dd");
	    		      DefaultTableModel mod = new DefaultTableModel(headerVect, 0);
	    		      table[0] = new JTable();
	    		      table[0].setModel(mod);
	    		      for(int i=0;i<3;i++)
	    		      {Vector<String> newRow = new Vector<String>();
	    		      newRow.add("time: "+curStringDate);
	    		      newRow.add("BbValue"+i);
	    		      newRow.add("CcValue"+i);
	    		      newRow.add("DdValue"+i);
	    		      mod.addRow(newRow);
	    		      }	
                            // создаем скроллинг панель с таблицей      
	    		      scrollPane[0] = new JScrollPane(table[0]);
                           // и добавляем на JPanel
	    	          TablePanel[0].add(scrollPane[0]);

	    	        //////////// добавляем JPanel с таблицей на  JTabbedPane 
	    	          jtp.addTab("Заголовок",TablePanel[0]);
	    	          getContentPane().add(jtp);
	    	          validate();
	   	    	

	      }
	    }; // end Timer Task
	    timer2.schedule( task, 1000,2000 );
	    



Что я упустила, подскажите плиз уважаемые профессионалы?
...
Рейтинг: 0 / 0
13.09.2016, 11:32
    #39308251
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Mari.PЧто я упустила, подскажите плиз уважаемые профессионалы?
Прочитать документацию
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/
https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html
...
Рейтинг: 0 / 0
13.09.2016, 12:31
    #39308332
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Blazkowicz, прочитала, сделала, результат тот же самый:

Так работает:
Код: java
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
////////////////////// создали листенер ////////////////////////////////// 
	    ActionListener timerlistener = new ActionListener() {
	    	public void actionPerformed(ActionEvent e)  {
	    	  
	    		jtp = new JTabbedPane();
		    	   getContentPane().add(jtp);
		    	     TablePanel[0] = new JPanel();
		
		    	    long curTime = System.currentTimeMillis()+3600000; 
		    	    String curStringDate = new SimpleDateFormat("hh.mm.ss").format(curTime);
		    	    //dd.MM.yyyy hh.mm.ss
		    		 // создадим и заполним динамическую таблицу   
		    		    Vector<String> headerVect = new Vector<String>();
		    		      headerVect.add("Aa");
		    		      headerVect.add("Bb");
		    		      headerVect.add("Cc");
		    		      headerVect.add("Dd");
		    		      DefaultTableModel mod = new DefaultTableModel(headerVect, 0);
		    		      table[0] = new JTable();
		    		      table[0].setModel(mod);
		    		      for(int i=0;i<3;i++)
		    		      {Vector<String> newRow = new Vector<String>();
		    		      newRow.add("time: "+curStringDate);
		    		      newRow.add("BbValue"+i);
		    		      newRow.add("CcValue"+i);
		    		      newRow.add("DdValue"+i);
		    		      mod.addRow(newRow);
		    		      }	      
		    		      scrollPane[0] = new JScrollPane(table[0]);
		    	          TablePanel[0].add(scrollPane[0]);
		    	          
		    	          /////////////////////////////////////////////////
		    	          // так работает
		    	          // добавляем панель в окно
		    	          add(TablePanel[0]);
		    	          validate();
		 
	          }
	        };
	   /////////////////////создали таймер /////////////////////////////////////////     
	    Timer timer1 =new Timer(1000,timerlistener);
	   // запустили 
	    timer1.start();
	   


Так не работает (выводится верно, но не обновляется):

Код: java
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
////////////////////// создали листенер ////////////////////////////////// 
	    ActionListener timerlistener = new ActionListener() {
	    	public void actionPerformed(ActionEvent e)  {
	    	  
	    		jtp = new JTabbedPane();
		    	   getContentPane().add(jtp);
		    	     TablePanel[0] = new JPanel();
		    	    // берем системное время и прибавляем час, тк не устанавливали обновления часовых поясов
		    	    long curTime = System.currentTimeMillis()+3600000; 
		    	    String curStringDate = new SimpleDateFormat("hh.mm.ss").format(curTime);
		    	    //dd.MM.yyyy hh.mm.ss
		    		 // создадим и заполним динамическую таблицу   
		    		    Vector<String> headerVect = new Vector<String>();
		    		      headerVect.add("Aa");
		    		      headerVect.add("Bb");
		    		      headerVect.add("Cc");
		    		      headerVect.add("Dd");
		    		      DefaultTableModel mod = new DefaultTableModel(headerVect, 0);
		    		      table[0] = new JTable();
		    		      table[0].setModel(mod);
		    		      for(int i=0;i<3;i++)
		    		      {Vector<String> newRow = new Vector<String>();
		    		      newRow.add("time: "+curStringDate);
		    		      newRow.add("BbValue"+i);
		    		      newRow.add("CcValue"+i);
		    		      newRow.add("DdValue"+i);
		    		      mod.addRow(newRow);
		    		      }	      
		    		      scrollPane[0] = new JScrollPane(table[0]);
		    	          TablePanel[0].add(scrollPane[0]);
		    	          
		    	          
		    	          jtp.addTab("Заголовок",TablePanel[0]);
		    	           getContentPane().add(jtp);
		    	           validate();
		   	
	          }
	        };
	   /////////////////////создали таймер /////////////////////////////////////////     
	    Timer timer1 =new Timer(1000,timerlistener);
	   // запустили 
	    timer1.start();
	   



Прочитала про похожую проблему, https://coderanch.com/t/518846/GUI/java/JTabbedPane-refreshing , но там конкретно не написали как ее решили. Что еще посмотреть, подскажите плиз уважаемые профессионалы?
...
Рейтинг: 0 / 0
13.09.2016, 12:37
    #39308337
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Научитесь излагать мысли. Что там где "не обновляется" понять сложно.
Научитесь искать источник проблемы. Вываливаете кучу своего кода, половина которого к вопросу отношения не имеет.
Прочтите, наконец, Clean Code by Robert Cecil Martin. Читать ваш код решительно нет никакого желания, ведь, вы его даже не всегда форматируете.
...
Рейтинг: 0 / 0
13.09.2016, 12:49
    #39308351
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Blazkowicz, прошу прощения, я новичок в Java.

Задача очень простая - разместить в окне любой изменяющийся во времени объект (например системное время)
Проблема - при попытке использования JTabbedPane ничего не обновляется, каким бы таймером не пользовалась.
Хотя без JTabbedPane все работает нормально.

Вопрос: что надо сделать, чтобы данные размещенные на JTabbedPane обновлялись по таймеру?
...
Рейтинг: 0 / 0
13.09.2016, 12:54
    #39308363
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Mari.PВопрос: что надо сделать, чтобы данные размещенные на JTabbedPane обновлялись по таймеру?
ППЦ. То есть вот эти все пертрубации только для того чтобы обновить данные в таблицах???
Почему бы просто содержимое TableModel не обновлять? Зачем пересобирать заново половину UI?
...
Рейтинг: 0 / 0
13.09.2016, 13:16
    #39308380
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Blazkowicz, вообще-то у меня количество таблиц , строк в них и количество
вкладок в JTabbedPane каждый раз по таймеру переменное и зависит от количества
объектов, по которым имеются актуальные данные (зачем отображать объект, если он уже месяц не отвечает).
Или все равно не надо все перерисовывать?
...
Рейтинг: 0 / 0
13.09.2016, 13:24
    #39308388
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Mari.PИли все равно не надо все перерисовывать?
Не надо. Появилась новая вкладка - добавили. Удалились старая - удалили. Не нужно всегда добавлять.

Вообще у вас по таймеру только добавление контролов. А кто и где их удаляет?
...
Рейтинг: 0 / 0
13.09.2016, 14:20
    #39308432
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Blazkowicz, Да удалять я их не удаляю, это ошибка. Думала, что раз объекты локальные,
после вывода на экран они "самоустраняются".
...
Рейтинг: 0 / 0
13.09.2016, 14:26
    #39308438
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Mari.P Думала, что раз объекты локальные,
Не бывает локальных объектов.

Mari.P после вывода на экран они "самоустраняются".
М-да.
...
Рейтинг: 0 / 0
14.09.2016, 07:05
    #39308756
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Blazkowicz, да, спасибо, в этом была ошибка, я не удаляла объекты.
Сейчас все работает.
...
Рейтинг: 0 / 0
14.09.2016, 08:39
    #39308788
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Mari.PСейчас все работает.
Самоуверенно.
...
Рейтинг: 0 / 0
14.09.2016, 08:50
    #39308794
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTabbedPane не перерисовывается по таймеру
Blazkowicz, погоняю несколько дней, будет уже более точный результат )))
Пока все обновляется нормально, память вроде не ест.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JTabbedPane не перерисовывается по таймеру / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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