powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / создание таблицы JTable
20 сообщений из 20, страница 1 из 1
создание таблицы JTable
    #32677103
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопросик такой.
Не подскажет кто-нибудь, как создать табличку, причем хотелось бы вручную создать таблицу с нужными мне заголовками столбцов, а потом добавлять строки, сколько мне необходимо.

Есть метод
addColumn(TableColumn aColumn)
Но я не могу понять, как задать текстом название колонки
как объявить TableColumn с определенным названием или есть другие методы?

Заранее спасибо за ответы
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677158
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну раз RTFM читать не хочешь, то вот тебе пример, разбирайся.

сначала нужно создать свой класс, который наследует AbstractTableModel и переопределить след. методы. (Реализацию методов оставил для примера.)
Код: 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.
class MyTableModel extends AbstractTableModel{
  ResultSet rs;
  ResultSetMetaData rsmd;
  ArrayList cach;



  public MyTableModel(MainFrame mf){
    rs=mf.rs;
    cach=mf.cach;
    try{
      rsmd = rs.getMetaData();
    }catch(SQLException e){
      e.printStackTrace();
    }
  }
   //количество трок 
  public int getRowCount(){
    return cach.size();
  }
   //количество столбцов 
  public int getColumnCount(){
    try{
      return rsmd.getColumnCount();
    }catch(SQLException e){
      e.printStackTrace();
      return 0;
    }
  }
   //значение ячеек 
  public Object getValueAt(int r, int c){
    if(r<cach.size()){
      return ((Object[])cach.get(r))[c];
    }
    else{
      return null;
    }
  }

   //имена столбцов 
  public String getColumnName(int c){
    try{
      return rsmd.getColumnName(c + 1);
    }catch(SQLException e){
      e.printStackTrace();
      return "";
    }
  }
}

затем JTable table=new JTable(new MyTableModel());
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677167
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что такое RTFM
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677171
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)))
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Ни перед одним из твоих печальных идолов я не склоняюсь в смирении и, тот, кто изрек "ты должен", есть мой смертный враг! Lavey(с)
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677182
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84А что такое RTFM

Read The Fuking Manual
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677200
Фотография рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84А что такое RTFM
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 //имена столбцов 
  public String getColumnName(int c){
    try{
      return rsmd.getColumnName(c + 1);
    }catch(SQLException e){
      e.printStackTrace();
      return "";
    }
  }
int c - номер столбца
return ... - нужно вернуть заголовок столбца. В данном примере он взят из ResultSetMetaData (физическое имя столбца в таблице). Можно брать из любой удобной для вас структуры данных или вообще прописать вручную.
Удачи. Читай доку.
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677263
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот в этой книге все подробно описано, скачай примеры.
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677387
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А задавать имена столбцов как можно?
Нужно TableColumnModel использовать?
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677404
Фотография рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84А задавать имена столбцов как можно?
Нужно TableColumnModel использовать?Интерестно. О чем и кому писал???
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32677895
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создаю класс расширяющий AbstractTableModel, в нем объявляю названия колонок

private String[] columnNames =
{
"Номер", "Получатель", "Сумма", "Дата платежа"
};

В другом классе пишу
TableModel model = new table_docs();
JTable docs = new JTable(model);
JScrollPane jsp = new JScrollPane(docs);
jPanel3.add(jScrollPane1, null);


а потом при запуске программы ошибка
Class or public constructor for the class not found: new table_docs()

И в итоге таблица не появляется

Что здесь не так и почему не появляется табличка?

Заранее спасибо за ответы
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32678013
Фотография А.Гpacoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84Я создаю класс расширяющий AbstractTableModel, в нем объявляю названия колонок

private String[] columnNames =
{
"Номер", "Получатель", "Сумма", "Дата платежа"
};

В другом классе пишу
TableModel model = new table_docs();
JTable docs = new JTable(model);
JScrollPane jsp = new JScrollPane(docs);
jPanel3.add(jScrollPane1, null);


а потом при запуске программы ошибка
Class or public constructor for the class not found: new table_docs()

И в итоге таблица не появляется

Что здесь не так и почему не появляется табличка?

Заранее спасибо за ответы

конструктор скорее всего приватный у тебя.
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32678782
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как зделать так, чтобы количество строк в таблице могло быть произвольным?
Ведь setValueAt похоже устанавливает значения в уже созданные строки

Заранее спасибо всем за ответы
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32678789
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сколько MyTableModel JTabl-у скажет в
Код: plaintext
1.
2.
public int getRowCount(){
    return <сколько>;
  }
, столько строк и будет :)
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32678916
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот же метод определяет количество строк,а как сказать таблице, что ей надо изменить кол строк на определенное значение или просто пользоваться setValue без появления ошибки OutOfBounds
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32678993
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у AbstractTableModel есть метод fireTableStructureChanged()

так вот сначала в модель вставляешь данные а затем вызываешь етод метод :)
Удачи!
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32680188
GrayRat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может пригодится...
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32680191
GrayRat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кусочек кода с примером использования

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
JTable tblHistory = new JTable();
ListSelectionModel lsmHistory = new DefaultListSelectionModel();
JScrollPane spnHistory = new JScrollPane();
JTableModel tmdHistory = null;

...

String[] strSubjectH = {"Код", "Время", "Валютная пара", "Лот", "Цена открытия", "Время закрытия"};
Object[] strObjectH = {"", "", "", "", "", ""};
 //*/ 
tmdHistory = new JTableModel(strSubjectH, strObjectH, 0);

tblHistory.setAutoCreateColumnsFromModel(true);
tblHistory.setModel(tmdHistory);
tblHistory.setSelectionModel(lsmHistory);
tblHistory.setToolTipText("");
tblHistory.setRowHeight(36);
lsmHistory.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Класс конечно не идеал, но простой, а там посмотришь внутрь... допишешь...
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32682341
lamer___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"How to Use Tables "
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

все просто и понятно.

respect! -)
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32685153
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1)А существует ли свойства, чтобы делать ячейки нередактируемыми? Если использовать DefaultTableModel это возможно?если расширять AbstractTableModel, то isCellEditing,я так понимаю.

2)А еще такой вопросик. Предположим, что существует панель. Мы к ней добавляем JScrollPane,а к JScrollPane таблицу.
Код: plaintext
1.
2.
3.
4.
      model = new DefaultTableModel(result,columns);
      docs = new JTable(model);
      jPanel3.add(jScrollPane1, null);
      this.getContentPane().add(jPanel3, null);       
Предположим, что этот кусочек повторяем несколько раз, получается, что в таблицу каждый раз добавляются новые записи, а старые не удаляются. Как полностью удалять предыдущие записи?
3)И еще такой вопрос, можно ли например удалять принадлежность JScrollPane панели? так, чтобы таблица больше не появлялась на экране и удалялась из памяти?


Заранее спасибо за ответы
...
Рейтинг: 0 / 0
создание таблицы JTable
    #32688628
ArchiMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 akula84:
1) А кто тебе мешает расширить DefaultTableModel и реализовать isCellEditable?
2) В коде не видно, где ты добавляешь таблицу к панели. Работай с одной таблицей, просто заново инициализируй docs с new JTable(model) и будет тебе счастье. Java сама заботится о памяти и очистке предыдущих объектов. Заново добавив docs к ScrollPane ты можешь проверить количество компонентов, протестировав их количество. Оно остается одним и тем же, что означает, что предыдущие таблицы в памяти не остаются. Удачи.
3)
Код: plaintext
1.
jScrollPane1.getViewport().remove(docs);
docs = null;
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / создание таблицы JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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