Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Динамическое изменение таблицы


Автор: yezh 4.5.2006, 09:52
Как сделать динмическое изменение таблицы, то есть добавление/удаление строк и столбцов? Какие методы надо переопределять в TableModel? Или не надо ничего переопределять, сожно воспользоваться чем-нибудь стандартным? 
З.Ы. При этом данные для заполнения таблицы берутся также из изменяющегося массива, т.е. мне не надо просто скрыть столбец, а убрать его совсем 

Автор: MrLjaO 4.5.2006, 10:49
Попробуй так:
Как я понимаю ... и надеюсь ... для работы с таблицей (JTable) ты используешь  class MyTableClass extends AbstractTableModel
 в ней просто напиши ещё одну функцию  ... например  
public void RetrieveData(){...} где в ней будешь или убирать  или добовлять строки  .... 
главное в ней вызови    fireTableDataChanged();   )) Пользуйся ..
Если не понятно объяснил  - стучи )  

Автор: yezh 4.5.2006, 11:08
а как потом вызвать эту функцию? вот примерно так:
Код

private class MyTableModel extends AbstractTableModel{

        public MyTableModel(){
            super();
        }
        public int getRowCount() {
            return por+1;
        }

        public int getColumnCount() {
            return pos+1;
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
            return c[rowIndex][columnIndex];
        }
        public boolean isCellEditable(int rowIndex, int columnIndex){
            return true;

        }


        public void setValueAt(Object aValue, int rowIndex, int columnIndex){
            c[rowIndex][columnIndex] = aValue;
        }
        public String getColumnName(int Column){
            return Integer.toString(Column);
        }

        public void RetrieveData(){
        c = new Object[por+1][pos+1];
        c[0][0] = "Пост/потр";
        for(int i = 0; i < por+1; i++)
            for(int j = 0; j < pos+1; j++)
                if(i!=0 || j!=0) {
                    c[i][j] = 0;
                }
        fireTableDataChanged();
        }
    }


а потом так..
Код

tab = new JTable(new MyTableModel());


изначально параметры заданы по умолчанию.. 
Пытаюсь вызвать функцию через tab.getModel().RetrieveData(), не дает, говорит что не может найти метод... 

Автор: MrLjaO 4.5.2006, 12:18
признаться не понимаю в чём проблема   но я делал так ...
Код


public class Panel extends JPanel {
 Panel(){
MyTableClass m_model;
m_model = new MyTableClass();
m_model.Init(); // инициализируем модель ... (заполняем / создаём  строки)

JTable table;
table = new JTable(m_model);
RetrieveData();

}

public void RetrieveData()
    {
        m_model.RetrieveData();
        this.repaint();
    }
class MyTableClass extends AbstractTableModel {
...
public void RetrieveData(){...}
}
}

что  то типа этого  

Автор: yezh 4.5.2006, 12:53
thx, прсто сразу не дошло что надо сделать объект модели таблицы... 

Автор: ShamanTrirukiy 4.5.2006, 13:00
Цитата(MrLjaO @  4.5.2006,  10:49 Найти цитируемый пост)
  fireTableDataChanged();

убранный столбец - это скорее fireTableStructureChanged();
Цитата(yezh @  4.5.2006,  11:08 Найти цитируемый пост)
Пытаюсь вызвать функцию через tab.getModel().RetrieveData(), не дает, говорит что не может найти метод...  

getModel() возвращает AbstractTableModel, попробуй так:  ((MyTableModel)tab.getModel()).RetrieveData() - должно сработать.

P.S. Замечание по оформлению кода. Имена методов в Java пишутся с маленькой буквы(всегда). 

Автор: yezh 4.5.2006, 13:28
thx, все заработало. Замечание учту 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)