2013-03-30 2 views
-1

Я только что начал среднюю школу и стал новым в программировании. Я работаю над своим первым заданием и застрял в проблеме. Я везде искал, но не нашел никакой помощи. Я написал gui, который принимает входные и выходные данные в JTable. Все выглядит отлично, за исключением того, что таблица не обновляется при вводе нового ввода, т. Е. Ранее отображаемая дата не изменяется на новые значения. Я подозреваю, что реализация AbstractTableModel, показанная ниже, является тем, что вызывает неисправность, поскольку я просто не знаю, как переопределить методы isCellEditable и setValueAt. Может кто-то PLS внести необходимые исправления и дать мне дополнительную информацию, которая поможет мне закончить мой проект? Я был бы глубоко благодарен, если бы вы могли вернуться ко мне как можно скорее.JTable ячейки не обновляются

пс. пН и В.Х. целые массивы, proc_1 и proc_ строковые массивы и таблицы добавляется к JTabbedPane, если это имеет значение ...

public class TableModel extends AbstractTableModel { 
    int numRows; 
    String colNames[] = { "NH", "Horse Names", "VH", 
          "Proc. I", "Proc. II" }; 
    TableModel() { 
     super(); 
     numRows = fnh; 
    } 

    @Override 
    public int getRowCount() { 
     return numRows; 
    } 

    @Override 
    public int getColumnCount() { 
     return 5; 
    } 

    @Override 
    public String getColumnName(int c) { 
     return colNames[c]; 
    } 

    @Override 
    public Object getValueAt(int r, int c) { 
     if (c == 0) 
      return nh[r]; 
     else if (c == 1) 
      return hNam[r]; 
     else if (c == 2) 
      return vh[r] ; 
     else if (c == 3) 
      return proc_1[r]; 
     else 
      return proc_2[r];  
    } 

    @Override 
    public boolean isCellEditable(int r, int c) { 
     return true; 
    } 

    @Override 
    public void setValueAt(Object v, int r, int c) { 
     fireTableCellUpdated(r, c); 
    } 
} 
+0

где ваши данные? массив, содержащий данные таблицы .. !! –

+0

Не следует за вами – user2143292

+0

Отличная ссылка Reimus. Конечно, пригодится. Большое спасибо!!! – user2143292

ответ

4
  • Ваш метод setValueAt(...) не устанавливает значения в модели. Все, что он делает, это пожар, способ уведомления, и ничего больше.
  • Кроме того, ваша модель по существу бесполезна, поскольку у нее нет данных «ядро», нечего хранить данные, которые он должен удерживать. Часто это коллекция, такая как ArrayList.
  • Вы должны перечитать JTable-учебник, я думаю.
+0

Да, и я не знаю, как это сделать, как я уже сказал. – user2143292

+0

@ user2143292: прочитайте учебник. Вы не можете просто сделать это. –

+0

Прочитали и не поняли, иначе woudldn't здесь просили о помощи ...? – user2143292

2

Вот ваш setValueAt должен выглядеть

public void setValueAt(Object v, int r, int c) { 
    if (c == 0) 
     nh[r] = (Integer)v; 
    else if (c == 1) 
     hNam[r] = (String)v; 
    else if (c == 2) 
     vh[r] = (Integer)v; 
    else if (c == 3) 
     proc_1[r] =(String)v; 
    else 
     proc_2[r] =(String) v; 
    fireTableCellUpdated(r, c); 
} 

И после того, как ваш проект завершается. Прочтите, чтобы заполнить учебник JTable на официальном сайте oracle. Там вы получите полное представление о том, как правильно использовать JTable. Вот ссылка на учебное пособие: How to use JTable

+0

Большое спасибо Vishal. Позвольте мне дать эту попытку, и я скоро вернусь к вам, хорошо? Pls следит за этой публикацией. :-) – user2143292

+0

Эй, приятель, не могли бы вы объяснить мне, почему таблица показывает первый раз с правильными данными? Является ли объект v объектом новых данных? Как его заполнить? – user2143292

+0

Прежде всего, вы говорите мне, что эта работа для вас? И в отношении вашего другого вопроса я смогу ответить на них только после того, как увижу ваш полный код. –

Смежные вопросы