Как удалить строку из JTable?

Я хочу удалить некоторые строки из JTable. Как мне это сделать?

Чтобы удалить строку из JTable, вам нужно удалить целевую строку из базовой TableModel . Если, например, ваш TableModel является экземпляром DefaultTableModel , вы можете удалить строку, выполнив следующие действия:

((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove); 

Если вам нужно простое рабочее решение, попробуйте использовать DefaultTableModel .

Если вы создали свою собственную модель таблицы, которая расширяет AbstractTableModel, то вы также должны реализовать метод removeRow (). Точная реализация зависит от базовой структуры, которую вы использовали для хранения данных.

Например, если вы использовали Vector, это может быть примерно так:

 public class SimpleTableModel extends AbstractTableModel { private Vector columnNames = new Vector(); // Each value in the vector is a row; String[] - row data; private Vector data = new Vector(); ... public String getValueAt(int row, int col) { return data.get(row)[col]; } ... public void removeRow(int row) { data.removeElementAt(row); } } 

Если вы использовали List, то это было бы очень похоже:

 // Each item in the list is a row; String[] - row data; List arr = new ArrayList(); public void removeRow(int row) { data.remove(row); } 

HashMap:

 //Integer - row number; String[] - row data; HashMap data = new HashMap(); public void removeRow(Integer row) { data.remove(row); } 

И если вы используете такие массивы, как этот

 String[][] data = { { "a", "b" }, { "c", "d" } }; 

то вам не повезло, потому что нет возможности динамически удалять элементы из массивов. Вы можете попытаться использовать массивы, отдельно сохраняя некоторые флаги, уведомляющие, какие строки удалены, а какие нет или каким-то другим коварным способом, но я бы посоветовал против этого … Это создало бы излишнюю сложность и фактически просто решало бы проблема, создавая другую . Это верный способ закончить здесь . Попробуйте один из приведенных выше способов хранения данных таблицы.

Чтобы лучше понять, как это работает и что нужно сделать, чтобы ваша собственная модель работала правильно, я настоятельно рекомендую вам обратиться к учебнику по Java , стандарту DefaultTableModel API и его исходному коду .

Правильный способ применения фильтра к JTable – через интерфейс RowFilter, добавленный в TableRowSorter. Используя этот интерфейс, представление модели можно изменить без изменения базовой модели. Эта страtagsя сохраняет парадигму Model-View-Controller, тогда как удаление строк, которые вы хотите скрывать от самой модели, нарушает парадигму, смешивая ваше разделение проблем.

JTable обычно формирует часть представления реализации MVC. Вы захотите удалить строки из своей модели. JTable, который должен прослушивать эти изменения, будет обновляться, чтобы отразить это удаление. Следовательно, вы не найдете removeRow () или аналогичный метод JTable.

Посмотрите на DefaultTableModel для простой модели, которую вы можете использовать:

http://java.sun.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html

Это расширяет AbstractTableModel, но должно быть достаточным для основных целей. Вы всегда можете расширить AbstractTableModel и создать свой собственный. Убедитесь, что вы установили его также в JTable.

http://java.sun.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

Посмотрите на основной учебник Sun для получения дополнительной информации об использовании JTable с моделью таблицы:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

mmm – очень простые парни

 for( int i = model.getRowCount() - 1; i >= 0; i-- ) { model.removeRow(i); } 
  • Что делает super.paintComponent (g)?
  • JTextArea не выбирается, но все еще отображается курсор «призрак»
  • Случайные ошибки при смене серии с использованием JFreeChart
  • Как отлаживать макеты Java Swing
  • Приведение JFileChooser поверх всех окон
  • Моделирование поведения пружин
  • Как лучше всего настроить Swing GUI?
  • Как я могу сделать анимацию Java Swing более гладкой
  • Использование JInternalFrame и некоторой кнопки
  • Java Swing: как я могу реализовать экран входа в систему, прежде чем показывать JFrame?
  • Печать большого компонента Swing
  • Interesting Posts
    Давайте будем гением компьютера.