Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 создание таблицы JTable  [new]
akula84
Member

Откуда:
Сообщений: 232
Вопросик такой.
Не подскажет кто-нибудь, как создать табличку, причем хотелось бы вручную создать таблицу с нужными мне заголовками столбцов, а потом добавлять строки, сколько мне необходимо.

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

Заранее спасибо за ответы
2 сен 04, 12:02    [928627]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
wessen
Member

Откуда: spb.ru
Сообщений: 2566
ну раз RTFM читать не хочешь, то вот тебе пример, разбирайся.

сначала нужно создать свой класс, который наследует AbstractTableModel и переопределить след. методы. (Реализацию методов оставил для примера.)
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());
2 сен 04, 12:17    [928724]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
akula84
Member

Откуда:
Сообщений: 232
А что такое RTFM
2 сен 04, 12:19    [928739]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
zalexaka
Member

Откуда: откуда все…
Сообщений: 1487
)))
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Ни перед одним из твоих печальных идолов я не склоняюсь в смирении и, тот, кто изрек "ты должен", есть мой смертный враг! Lavey(с)
2 сен 04, 12:20    [928744]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
wessen
Member

Откуда: spb.ru
Сообщений: 2566
akula84
А что такое RTFM


Read The Fuking Manual
2 сен 04, 12:23    [928758]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
рубль
Member [заблокирован]

Откуда: Томск
Сообщений: 5047
akula84
А что такое RTFM
//имена столбцов
  public String getColumnName(int c){
    try{
      return rsmd.getColumnName(c + 1);
    }catch(SQLException e){
      e.printStackTrace();
      return "";
    }
  }
int c - номер столбца
return ... - нужно вернуть заголовок столбца. В данном примере он взят из ResultSetMetaData (физическое имя столбца в таблице). Можно брать из любой удобной для вас структуры данных или вообще прописать вручную.
Удачи. Читай доку.
2 сен 04, 12:27    [928780]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
wessen
Member

Откуда: spb.ru
Сообщений: 2566
Вот в этой книге все подробно описано, скачай примеры.
2 сен 04, 12:44    [928890]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
akula84
Member

Откуда:
Сообщений: 232
А задавать имена столбцов как можно?
Нужно TableColumnModel использовать?
2 сен 04, 13:21    [929162]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
рубль
Member [заблокирован]

Откуда: Томск
Сообщений: 5047
akula84
А задавать имена столбцов как можно?
Нужно TableColumnModel использовать?
Интерестно. О чем и кому писал???
2 сен 04, 13:27    [929212]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
akula84
Member

Откуда:
Сообщений: 232
Я создаю класс расширяющий 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()

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

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

Заранее спасибо за ответы
2 сен 04, 16:13    [930221]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
А.Гpacoff
Member [заблокирован]

Откуда: tester51:tester51
Сообщений: 6762
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()

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

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

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


конструктор скорее всего приватный у тебя.
2 сен 04, 16:50    [930435]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
akula84
Member

Откуда:
Сообщений: 232
А как зделать так, чтобы количество строк в таблице могло быть произвольным?
Ведь setValueAt похоже устанавливает значения в уже созданные строки

Заранее спасибо всем за ответы
3 сен 04, 10:37    [931873]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
zalexaka
Member

Откуда: откуда все…
Сообщений: 1487
А сколько MyTableModel JTabl-у скажет в
public int getRowCount(){
    return <сколько>;
  }
, столько строк и будет :)
3 сен 04, 10:41    [931887]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
akula84
Member

Откуда:
Сообщений: 232
Этот же метод определяет количество строк,а как сказать таблице, что ей надо изменить кол строк на определенное значение или просто пользоваться setValue без появления ошибки OutOfBounds
3 сен 04, 11:23    [932151]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
zalexaka
Member

Откуда: откуда все…
Сообщений: 1487
у AbstractTableModel есть метод fireTableStructureChanged()

так вот сначала в модель вставляешь данные а затем вызываешь етод метод :)
Удачи!
3 сен 04, 11:48    [932309]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
GrayRat
Member

Откуда: Ростов-на-Дону
Сообщений: 59
Может пригодится...

К сообщению приложен файл (JTableModel.java - 5Kb) cкачать
3 сен 04, 21:55    [934733]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
GrayRat
Member

Откуда: Ростов-на-Дону
Сообщений: 59
Кусочек кода с примером использования

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);

Класс конечно не идеал, но простой, а там посмотришь внутрь... допишешь...
3 сен 04, 22:02    [934739]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
lamer___
Member

Откуда:
Сообщений: 26
"How to Use Tables "
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

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

respect! -)
7 сен 04, 05:37    [938303]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
akula84
Member

Откуда:
Сообщений: 232
1)А существует ли свойства, чтобы делать ячейки нередактируемыми? Если использовать DefaultTableModel это возможно?если расширять AbstractTableModel, то isCellEditing,я так понимаю.

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


Заранее спасибо за ответы
8 сен 04, 12:54    [942966]     Ответить | Цитировать Сообщить модератору
 Re: создание таблицы JTable  [new]
ArchiMage
Member

Откуда: Санкт-Петербург
Сообщений: 244
2 akula84:
1) А кто тебе мешает расширить DefaultTableModel и реализовать isCellEditable?
2) В коде не видно, где ты добавляешь таблицу к панели. Работай с одной таблицей, просто заново инициализируй docs с new JTable(model) и будет тебе счастье. Java сама заботится о памяти и очистке предыдущих объектов. Заново добавив docs к ScrollPane ты можешь проверить количество компонентов, протестировав их количество. Оно остается одним и тем же, что означает, что предыдущие таблицы в памяти не остаются. Удачи.
3)
jScrollPane1.getViewport().remove(docs);
docs = null;
10 сен 04, 03:48    [949254]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить
 
Разработка веб приложений с помощью Visual Studio 2010   29 000 руб.
Java сквозной курс от а до я. от java программирования до разработки java ee 7 web и
ejb приложений с использованием баз данных (на примере mysql)
  57 000 руб.
Создание запросов в SQL Server 2012   29 500 руб.
Администрирование баз данных Microsoft SQL Server   29 500 руб.
Основы web-программирования. HTML, CSS, PHP   26 990 руб.