Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 20:08   #1
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию JTable получение значения ячейки таблицы

Доброго вечера.
Возникла проблема с JTable (помоему JTable сам по себе большая проблема) Пользователь вводит данные и затем эти данные нужно занести например в массив. Перелопатил кучу сайтов и нигде конкретно ничего не нашел (уже возникает вопрос а возможно ли такое).
Посмотрите пожалуйста код (IDE NetBeans) по нажатию кнопки (вызывается метод getValueAt) возвращается значение которое задается в конструкторе (а хотелось бы чтобы возвращалось значение которое я ввел в таблицу при выполнении приложения):
Код:
public class NewJFrame extends javax.swing.JFrame {
BooleanTableModel model;
      public NewJFrame() {
        initComponents();
        setVisible(true);
        model = new BooleanTableModel();
        jTable1 = new JTable (model);
        jTable1.setFillsViewportHeight(true);
       }

   class BooleanTableModel extends AbstractTableModel {

       String[] columns = {"STUDENT ID", "NAME", "SCORE", "PASSED"};
       Object[][] data = {
           {"S001", "ALICE", 90.00, Boolean.TRUE},
           {"S002", "BOB", 45.50, Boolean.FALSE},
           {"S003", "CAROL", 60.00, Boolean.FALSE},
           {"S004", "MALLORY", 75.80, Boolean.TRUE}
       };
       public BooleanTableModel (){
           jTable1.setModel(new javax.swing.table.DefaultTableModel(data,columns));
       }
        public int getRowCount() {
            return data.length;
        }
       
        public int getColumnCount() {
            return columns.length;
        }
       
        public Object getValueAt(int rowIndex, int columnIndex) {
            return data[rowIndex][columnIndex];
        }
        
    }
    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        System.out.println(model.getValueAt(0, 2));
    }

   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 19.08.2011, 22:24   #2
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от atenon Посмотреть сообщение
помоему JTable сам по себе большая проблема
Если вы пытаетесь работать с тем что не понимаете и тем более без необходимых знаний программирования(как алгоритмов так и механизмов ООП), то вполне естественно что вся ваша работа будет для вас проблемой.


Рассмотрим код.
#1
Код:
model = new BooleanTableModel();
Создаем модель данных таблицы. посмотрим теперь в конструктор данного класса:
#2
Код:
jTable1.setModel(new javax.swing.table.DefaultTableModel(data,columns));
Тут мы пытаемся над переменной jTable1 вызвать метод setModel и внедряем в него экземпляр DefaultTableModel (который, заметим, позволяет редактировать данные).
Смотрим дальше:
#3
Код:
jTable1 = new JTable (model);
Очень интересно, если мы инициализировали переменную jTable1 с предварительно созданной моделью (листинг #1), то получается что мы воткнули модель либо в неизвестно какой экземпляр JTable (листинг #2), либо вообще в null (в первом случае это может быть причиной трудноуловимых багов, во втором будет выброс исключения).

Теперь посмотрим на декларацию класса BooleanTableModel:
#4
Код:
class BooleanTableModel extends AbstractTableModel{/*...*/}
Класс наследуется от AbstractTableModel (который, заметим, не позволяет редактировать данные) и не переопределяет метод isCellEditable(int, int), и как следствие получаем: любой экземпляр модели BooleanTableModel сделает свою таблицу нередактируемой.

Удачи в рефакторинге кода.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 31.08.2011, 20:39   #3
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Спасибо за помощь но дело как то не идет. Попробовал по другому но явно в знаниях пробел, никак измененные данные таблица не хочет возвращать. Посмотрите пожалуйста
Код:
// Создаю массив который в модели будет являтся заголовком таблицы "А"
            columnNamesA = new String [kol_stolbA];
            // Создаю массив который в модели будет содержать данные таблицы "А"
            dataA = new String [kol_strokA] [kol_stolbA];
            // Заполняю заголовок для модели
            for (int i=0; i<kol_stolbA; i++){
                columnNamesA[i]=Integer.toString(i+1);
            }
            // Заполняю данные для модели
            for (int i=0; i<kol_strokA; i++)
                for (int j=0; j<kol_stolbA; j++){
                    dataA[i][j]="1";
                }
            // Создаю модель 
            modA = new DefaultTableModel (dataA,columnNamesA);
            // Добовляю модель в таблицу
            tableA.setModel(modA);
            // До этой строчки все получается согласно моим ожиданиям
                                       

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       // Здесь метод возвращает значение изначально установленное в модели, 
       //а никак не то, что я ввожу в таблице
        System.out.println(modA.getValueAt(0, 0));
    }
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 02.09.2011, 20:56   #4
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

весь код опубликуйте
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 04.09.2011, 09:22   #5
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Спасибо с данной проблемой разобрался, но тут же возникла другая.
К примеру: в таблице 4 ячейки, изначально таблица заполнена НУЛЯМИ. Поочередно ввожу данные (например 1).
Проблема: В первых трех ячейках сохраняются единицы. В четвертой ячейке остается ноль.
Решение проблемы: После ввода однерки в четвертую ячейку нужно щелкнуть мышкой по любой другой ячейке (как я понял только после этого данные сохраняются в МОДЕЛИ)
Главная проблема: Пользователь (он же препод) после ввода цифры в 4 ячейку не будет заморачиваться с щелчками по другим ячейкам, а будет жать на кнопку РАССЧИТАТЬ (в то время как в 4 ячейке остался ноль, а не его введенная единица) в результате неверное решение.
Может есть метод который обновляет данные таблицы?
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 04.09.2011, 15:01   #6
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от atenon Посмотреть сообщение
Может есть метод который обновляет данные таблицы?
Не обновляет, а сохраняет редактируемые данные, тогда уж.

следующие ссылки должны вас направить в нужную сторону.
http://download.oracle.com/javase/6/...ellEditor.html
http://download.oracle.com/javase/6/...rListener.html

Мне кажется вам уже просто лень разбираться самому - все варианты использования любого класса из ядра java ясно видны в комментариях, методах и атрибутах класса.

Рекомендую подружиться с гуглом и javadoc.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение адреса ячейки Sergey112233 Microsoft Office Excel 2 04.08.2011 17:08
Получение значения последовательности. Oracle Wicort SQL, базы данных 0 24.02.2011 16:37
Активирование значения ячейки, на основе другой ячейки Mark.ru Microsoft Office Excel 5 13.12.2010 16:23
Получение значения по адрессу Matr1x Общие вопросы C/C++ 4 09.02.2010 05:55
Получение имя листа из ячейки. Sergg Microsoft Office Excel 4 11.09.2009 17:21