Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / редактирование ячейки в JTable / 3 сообщений из 3, страница 1 из 1
24.08.2006, 13:02
    #33939954
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
редактирование ячейки в JTable
всем привет.
помогите плз разобраться в следующей проблемке.
Задача:
разрешить редактирование только одной определенной строки в таблице .

Решение:
создаем таблицу JTable с некоторым количеством строк и столбцов.
для некоторого столбца (у меня типа GregorianCalendar) назначаю редактора:
Код: plaintext
myTable.getColumnModel().getColumn( 0 ).setCellEditor(myDateEditor);

редактор myDateEditor :
Код: 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.
34.
 class  MyDateEditor  extends  AbstractCellEditor  implements  TableCellEditor, MouseListener{
//этот метод возвращает MyDateJTextfield,
//который считывает текстовое поле и преобразует ее значение в
//объект класса GregorianCalendar
	 public  Component getTableCellEditorComponent(JTable table, Object value,
			 boolean  isSelected,  int  row,  int  column) {
 return   new  MyDateJTextField();}

//этот метод возвращает непосредственное значение в ячейку таблицы
	 public  Object getCellEditorValue() {
		 return  myDateJTextField.getDate();
	}
	// а этот метод как раз и выдает разрешение на редактирование ячейки в столбце
	
         public   boolean  isCellEditable(EventObject anEvent){
		 int  selectedRow= 0 ;
		 if (anEvent.getSource()  instanceof  JTable){
			JTable table=(JTable)anEvent.getSource();
		selectedRow=table.getSelectedRow();		
		out.println("whether row: "+selectedRow+" editable?");
		//выдает сначало -1, потом номера строк предыдущих кликов
		}
		//условно возвращаю false
		 return  false;
	}
	//событие мыши. здесь всегда правильно выдается номер строки
	 public   void  mouseClicked(MouseEvent e) {
		 if  (e.getSource()  instanceof  JTable) {
			JTable table=(JTable)e.getSource();
out.println("mouse clicked at row " + table.getSelectedRow()+ " column "+table.getSelectedColumn());
		}

	}

}
так вот проблема выражается в том, что selectedRow в методе isCellEditable принимает не корректные значания. Точнее номера строк предыдущих кликов, а реальный номер строки выдается методом mouseClicked. Самое скверное заключается в том, что сначало вызывается ВСЕГДА isCellEditable(), а уже потом mouseClicked(). И я не нахоже никакой возможности исправить ситуацию.

Где может быть ошибка ?
или как по другому решить задачу ?

заранее благодарен
...
Рейтинг: 0 / 0
24.08.2006, 13:32
    #33940101
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
редактирование ячейки в JTable
здесь на странице 506 рассказывается как редактировать таблицу
...
Рейтинг: 0 / 0
25.08.2006, 10:35
    #33942228
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
редактирование ячейки в JTable
to Deady
большое спасибо. книжка очень полезная и вовремя.

для тех кто столкнется с подобной проблемой:
решение в методе
Код: plaintext
1.
 public   boolean  isCellEditable( int  row,  int  column)
класса DefaultTableModel

большое спасибо
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / редактирование ячейки в JTable / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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