gpt4 book ai didi

java - 似乎无法让 TableModelListener 工作

转载 作者:搜寻专家 更新时间:2023-11-01 01:18:32 24 4
gpt4 key购买 nike

我正在创建一个 UI 类,所有内容都将在其中运行(另一个类将作为运行器)。在这个类中,我有一个表,该表应该在更改时创建 TableModeEvents,但它似乎没有这样做。

每当我对表格进行任何操作时,控制台应该打印出“test”,但事实并非如此。我已经制作了其他 SSCCE,只要我将所有内容都保存在一个程序中(在主要方法中并且只有子类和匿名类),它们就可以正常工作,但我似乎无法让它跨类工作。

知道我做错了什么吗?

package SSCCE;

import java.awt.BorderLayout;

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class SSCCE {

static Object[][] data = { {"Abyss", Boolean.FALSE},{"Scepter", Boolean.FALSE},{"FoN", Boolean.FALSE} };
public static void main(String[] args){

//table model------------------------------------------
TableModel model = new AbstractTableModel(){
Object[][] rowData = { {"Abyss", Boolean.FALSE},{"Scepter", Boolean.FALSE},{"FoN", Boolean.FALSE} };
String[] columnNames = {"Name","Boolean"};

public int getColumnCount() {return columnNames.length;}

public String getColumnName(int column) {return columnNames[column];}

public int getRowCount() {return rowData.length;}

public Object getValueAt(int row, int column) {return rowData[row][column];}

public Class getColumnClass(int column) {return (getValueAt(0, column).getClass());}

public void setValueAt(Object value, int row, int column) {rowData[row][column] = value;}

public boolean isCellEditable(int row, int column) {return (true);}
};


JTable table = new JTable(model);
//tableChanged------------------------------------------
model.addTableModelListener(new TableModelListener(){
public void tableChanged(TableModelEvent e) {
System.out.println("test");
}

});

//frame stuff, ignore-----------------------------------
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.add(table,BorderLayout.CENTER);
frame.setSize(500,400);
frame.setLocation(400,200);
frame.setDefaultCloseOperation(3);
frame.setVisible(true);

}

}

最佳答案

当您更改任何表格单元格的值时,将调用 setValueAt 方法,但不会触发任何事件。

尝试将 fireTableCellUpdated(row, column) 方法调用添加到您的 setValueAt 方法中,如下所示:

public void setValueAt(Object value, int row, int column) {
rowData[row][column] = value;
fireTableCellUpdated(row, column);
}

请注意,您也可以fireTableDataChanged(),但这会触发最一般的事件,建议您触发最具体的事件,因为它避免了不必要的工作并且能够维持选择状态.

关于java - 似乎无法让 TableModelListener 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com