gpt4 book ai didi

java - 将 TableModelListener 添加到 AbstractTableModel

转载 作者:行者123 更新时间:2023-12-02 08:15:04 24 4
gpt4 key购买 nike

我在将 TableModelListener 添加到 AbstractTableModel 时遇到了问题。程序停止工作,JFrame 不响应任何按钮单击,甚至关闭 JFrame。

我想要的是当 myTable 中的行数等于或大于 2 行时启用 JButton

这是我的代码...

我的自定义表格:

public class MyTable extends JPanel
{
public Main main;
public ArrayList<MyData> lstData;
public JTable table;
public MyTableModel model;
// ...

public MyTable(ArrayList<MyData> lstData, Main main)
{
this.lstData = lstData;
this.main = main;
model = new MyTableModel(lstData);
table = new JTable(model);
// ...
}

// ...

public int getTableSize()
{
return model.getRowCount();
}
public TableModel getModel()
{
return model;
}

public class MyTableModel extends AbstractTableModel
{
protected String[] columnNames = new String[ ] {"#","Name", "Phone Number"};
protected ArrayList<MyData> lstData;
protected Class[] types = new Class[]{String.class, String.class, String.class};

public MyTableModel(ArrayList<MyData> lstData)
{ this.lstData = lstData; }

public void SetData(ArrayList<MyData> lstData)
{ this.lstData = lstData; fireTableDataChanged(); }

@Override
public String getColumnName(int columnIndex)
{ return columnNames[columnIndex]; }

@Override
public Class getColumnClass(int columnIndex)
{ return types[columnIndex]; }

public Object getValueAt(int row, int column)
{
if (row < 0 || row > lstData.size()) return null;
MyData obj = lstData.get(row);
switch(column)
{
case 0: return obj.getID();
case 1: return obj.getName();
case 2: return obj.getPhoneNumber();
default: return null;
}
}

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

}
}

主类:

public class Main extends JFrame implements TableModelListener
{
public static ArrayList<myData> lstData;
public static MyTable table;
public static JButton myButton;
public Main()
{
// ...
table = new MyTable(lstData, this);
table.getModel().addTableModelListener(this);
myButton = new JButton();
myButton.setEnabled(false);
// ...
}

// ...

public void tableChanged(TableModelEvent e)
{
int firstRow = e.getFirstRow();
int lastRow = e.getLastRow();
int mColIndex = e.getColumn();

switch(e.getType())
{
case TableModelEvent.INSERT:
if(table.getTableSize() >= 2) myButton.setEnabled(true);
else myButton.setEnabled(false);
break;

case TableModelEvent.DELETE:
if(table.getTableSize() >= 2) myButton.setEnabled(true);
else myButton.setEnabled(false);
break;
}
}
}

你能帮我解决这个问题吗?提前致谢。

编辑:

仅当我从表中添加或删除元素时,GUI 才会停止响应。

编辑2:

向表中添加元素后,没有错误或异常抛出,只是卡住了 gui 而没有响应

最佳答案

基本tutorial关于TableModelListener hereherehere

最好是 camickr Table Cell Listener实现了 TableCell 中监听的最深层功能

关于java - 将 TableModelListener 添加到 AbstractTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6583289/

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