あなたはコンパイルして実行するために私たちのために有効なMCVEを投稿していないので、あなたの質問は、正確に答えることは不可能ですが、 JTableのモデルを実際のモデル自体を変更することなく初期化するために使用されたコレクションの状態を変更しようとしているようです。
JTableからすべてのデータを削除するには、すべての行を削除してください。 DefaultTableModelを使用している場合は、モデル上で.setRowCount(0)
を呼び出すだけです。
repaint()
を呼び出す必要はありません。モデルを変更すると、自動的に再描画が呼び出されるためです。また、モデルでfireTableDataChanged()
を呼び出そうとするべきでもありません。このタイプの呼び出しは、モデル自体によってのみ呼び出される必要があるためです。例えば
、私のMCVE:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.Random;
import javax.swing.*;
import javax.swing.table.*;
public class TableExample {
private static void createAndShowGui() {
TablePanel tablePanel = new TablePanel();
JMenuItem fillTableItem = new JMenuItem(new FillTableAction(tablePanel));
JMenuItem clearTableItem = new JMenuItem(new ClearTableAction(tablePanel));
JMenu tableMenu = new JMenu("Table Actions");
tableMenu.setMnemonic(KeyEvent.VK_T);
tableMenu.add(fillTableItem);
tableMenu.add(clearTableItem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(tableMenu);
JFrame frame = new JFrame("TableExample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(tablePanel);
frame.setJMenuBar(menuBar);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
@SuppressWarnings("serial")
class FillTableAction extends AbstractAction {
private TablePanel tablePanel;
public FillTableAction(TablePanel tablePanel) {
super("Fill Table");
putValue(MNEMONIC_KEY, KeyEvent.VK_F);
this.tablePanel = tablePanel;
}
@Override
public void actionPerformed(ActionEvent e) {
tablePanel.fillTable();
}
}
@SuppressWarnings("serial")
class ClearTableAction extends AbstractAction {
private TablePanel tablePanel;
public ClearTableAction(TablePanel tablePanel) {
super("Clear Table");
putValue(MNEMONIC_KEY, KeyEvent.VK_C);
this.tablePanel = tablePanel;
}
@Override
public void actionPerformed(ActionEvent e) {
tablePanel.clearTable();
}
}
@SuppressWarnings("serial")
class TablePanel extends JPanel {
private static final String[] COL_NAMES = { "Name", "Surname", "ID" };
private DefaultTableModel model = new DefaultTableModel(COL_NAMES, 0);
private JTable table = new JTable(model);
private Random random = new Random();
public TablePanel() {
setLayout(new BorderLayout());
add(new JScrollPane(table));
}
public void clearTable() {
model.setRowCount(0);
}
// fill it with random text and data
public void fillTable() {
int rows = random.nextInt(50) + 40;
for (int i = 0; i < rows; i++) {
StringBuilder sb = new StringBuilder();
char c = (char) ('A' + random.nextInt(26));
sb.append(c);
for (int j = 0; j < 4 + random.nextInt(3); j++) {
sb.append((char) ('a' + random.nextInt(26)));
}
String name = sb.toString();
sb.delete(0, sb.length());
sb.append((char) ('A' + random.nextInt(26)));
for (int j = 0; j < 6 + random.nextInt(4); j++) {
sb.append((char) ('a' + random.nextInt(26)));
}
String surName = sb.toString();
int id = random.nextInt(Integer.MAX_VALUE/2);
Object[] rowData = { name, surName, id };
model.addRow(rowData);
}
}
}
がに編集を参照してください。 swer。繰り返しますが、これで質問に答えることができない場合は、あなた自身の[mcve]を投稿してください。 –
'table.repaint()'を 'table.fireTableDataChanged()'に置き換えてください。 –