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

Решение:
создаем таблицу 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
редактирование ячейки в JTable
    #33940101
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь на странице 506 рассказывается как редактировать таблицу
...
Рейтинг: 0 / 0
редактирование ячейки в JTable
    #33942228
kadet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Deady
большое спасибо. книжка очень полезная и вовремя.

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

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


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