powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Редактирование ячеек в JTable
7 сообщений из 7, страница 1 из 1
Редактирование ячеек в JTable
    #34268931
DIMA11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и занесение изменений в модель и БД.
Примерчиком помогите, плиз...
...
Рейтинг: 0 / 0
Редактирование ячеек в JTable
    #34269467
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чём проблема? У модели таблицы есть метод public void setValue(Object value, int row, int column).
Соответственно предлагаю вариант: по row получать ПК записи, по column имя поля. И делать запрос на апдейт базы.

Главное не забыть говорить что поле редактируемо. Как метод зовётся не помню. Вроде public boolean isEditable(int column)

Код: plaintext
ROLLBACK;
...
Рейтинг: 0 / 0
Редактирование ячеек в JTable
    #34269671
DIMA11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взял пример из книги И.Портянкина "Swing. Эффективные пользовательские интерфейсы"
Класс реализующий модель таблицы оставил без изменений, а во втором поменял подключение к БД. Может чего пропустил... Редактировать все так-же не получается. Подскажите что не так.

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
 import  javax.swing.*;
 import  java.sql.ResultSet;
 import  java.sql.DriverManager;
 import  java.sql.Connection;
 import  java.sql.Statement;
 import  java.io.FileInputStream;
 import  java.util.Properties;

 public   class  DatabaseTable
{
     public   static   void  main(String[] args)
    {
        // инициализация JDBC
        Connection conn;
         try 
        {
            Properties props =  new  Properties();
            FileInputStream in
                    =  new  FileInputStream("database.properties");
            props.load(in);
            in.close();

            String drivers = props.getProperty("jdbc.drivers");
             Class .forName(drivers);
            String url = props.getProperty("jdbc.url");
            String ip = props.getProperty("jdbc.iphome");
            String base = props.getProperty("jdbc.base");
            url = url + "dima";
            url = url + "/";
            url = url + "dima";
            url = url + ip + base;
            conn = DriverManager.getConnection(url);
            Statement st = conn.createStatement();
            // выполняем запрос
            ResultSet rs = st.executeQuery(
                "select * from INFO");
            // наша модель
            DatabaseTableModel dbm =
                 new  DatabaseTableModel(true);
            // таблица и окно
            JTable table =  new  JTable(dbm);
            JFrame frame =  new  JFrame("DataBaseTable");
            frame.setSize( 400 ,  300 );
            frame.getContentPane().add( new  JScrollPane(table));
            frame.setVisible(true);
            // выводим результат запроса на экран
            dbm.setDataSource(rs);
            rs.close();
            conn.close();
        }
         catch  (Exception ex)
        {
            JOptionPane.showMessageDialog( null ,
                ex.getMessage(), "Ошибка подключения к БД!",
                JOptionPane.ERROR_MESSAGE);
        }

    }
}

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
 import  javax.swing.table.*;
 import  java.sql.*;
 import  java.util.*;

 public   class  DatabaseTableModel 
	 extends  AbstractTableModel {
	// здесь мы будем хранить названия столбцов
	 private  ArrayList columnNames =  new  ArrayList();
	// список типов столбцов
	 private  ArrayList columnTypes =  new  ArrayList();
	// хранилище для полученных данных из базы данных
	 private  ArrayList data =  new  ArrayList();
	
	// конструктор позволяет задать возможность редактирования
	 public  DatabaseTableModel( boolean  editable) {
		 this .editable = editable;
	}
	 private   boolean  editable;
	
	// количество строк
	 public   int  getRowCount() {
		 synchronized  (data) {
			 return  data.size();
		}
	}
	// количество столбцов
	 public   int  getColumnCount() {
		 return  columnNames.size();
	}
	// тип данных столбца
	 public   Class  getColumnClass( int  column) {
		 return  ( Class )columnTypes.get(column);
	}
	// название столбца
	 public  String getColumnName( int  column) {
		 return  (String)columnNames.get(column);
	}
	// данные в ячейке
	 public  Object getValueAt( int  row,  int  column) {
		 synchronized  (data) {
			 return  ((ArrayList)data.get(row)).get(column);
		}
	}
	// возможность редактирования
	 public   boolean  isEditable( int  row,  int  column) {
		 return  editable;
	}
	// замена значения ячейки
	 public   void  setValueAt(
	 Object value,  int  row,  int  column){
		 synchronized  (data) {
			((ArrayList)data.get(row)).set(column, value);
		}
	}
	// получение данных из объекта ResultSet
	 public   void  setDataSource(
	 ResultSet rs)  throws  Exception {
		// удаляем прежние данные
		data.clear();
		columnNames.clear();
		columnTypes.clear();
		// получаем вспомогательную информацию о столбцах
		ResultSetMetaData rsmd = rs.getMetaData();
		 int  columnCount = rsmd.getColumnCount();
		 for  (  int  i= 0 ; i<columnCount; i++) {
			// название столбца
			columnNames.add(rsmd.getColumnName(i+ 1 ));
			// тип столбца
			 Class  type =
				 Class .forName(rsmd.getColumnClassName(i+ 1 ));
			columnTypes.add(type);
		}
		// сообщаем об изменениях в структуре данных
		fireTableStructureChanged();
		// получаем данные
		 while  ( rs.next() ) {
			// здесь будем хранить ячейки одной строки
			ArrayList row =  new  ArrayList();
			 for  (  int  i= 0 ; i<columnCount; i++) {
				 if  (columnTypes.get(i) == String. class )
					row.add(rs.getString(i+ 1 ));
				 else 
					row.add(rs.getObject(i+ 1 ));
			}
			 synchronized  (data) {
				data.add(row);
				// сообщаем о прибавлении строки
				fireTableRowsInserted(
					data.size()- 1 , data.size()- 1 );
			}
		}
	}
}
...
Рейтинг: 0 / 0
Редактирование ячеек в JTable
    #34269699
jusio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переменуйте метод isEditable в isCellEditable
...
Рейтинг: 0 / 0
Редактирование ячеек в JTable
    #34269704
DIMA11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!! Заработало :))
...
Рейтинг: 0 / 0
Редактирование ячеек в JTable
    #34269736
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
какой ужас
...
Рейтинг: 0 / 0
Редактирование ячеек в JTable
    #34269813
DIMA11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не ужас, это И.Портянкин "Swing. Эффективные пользовательские интерфейсы" :))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Редактирование ячеек в JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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