JTable добавляет / удаляет строки в пользовательскую модель таблицы (обновление отображения таблицы) - PullRequest
2 голосов
/ 16 августа 2010

У кого-нибудь есть хороший пример того, как добавить / удалить строки из JTable, используя пользовательскую модель таблицы? Кажется, проблема в том, как обновлять таблицу при добавлении или удалении элементов.

По-настоящему простая идея заключается в том, чтобы над моей таблицей была кнопка добавления и удаления, которая позволяет пользователю на лету изменять таблицу.

Ответы [ 2 ]

4 голосов
/ 16 августа 2010

Вот пример добавления строки:

import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;

public class RowAdder extends JFrame {

  final SimpleModel tableData = new SimpleModel();
  JTable table = new JTable(tableData);

  public static void main(String[] args) {
    RowAdder ra = new RowAdder();
    ra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ra.setSize(400, 300);
    ra.setVisible(true);
  }

  public RowAdder() {
    final JTextField textField  = new JTextField();
    setLayout(new BorderLayout());
    add(new JScrollPane(table), BorderLayout.CENTER);
    textField.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        tableData.addText(textField.getText());
        textField.setText("");
      }
    });
    add(textField, BorderLayout.SOUTH);
  }

}
class SimpleModel extends AbstractTableModel {

  Vector textData = new Vector();

  public void addText(String text) {
    textData.addElement(text);
    fireTableDataChanged();
  }

  public int getRowCount() {
    return textData.size();
  }

  public int getColumnCount() {
    return 3;
  }

  public Object getValueAt(int row, int column) {
    return textData.elementAt(row);
  }

}

выше ссылки с: http://www.java2s.com/Tutorial/Java/0240__Swing/AddrowstoaTable.htm

Оформить этот урок о JTable:

http://download.oracle.com/javase/tutorial/uiswing/components/table.html

Специально для проверки модели таблицы:

http://download.oracle.com/javase/tutorial/uiswing/components/table.html#data

Я думаю, что это руководство должно ответить на все ваши вопросы.

0 голосов
/ 16 августа 2010

Вы должны уведомить объект JTable об изменениях базовой модели таблицы.Таблица не наблюдает за моделью, но ожидает событий.

После каждого изменения (или набора изменений) создайте TableModelEvent и вызовите метод таблиц tableChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...