gpt4 book ai didi

java - 将 JTable 值保存在 ArrayList 中

转载 作者:行者123 更新时间:2023-11-30 01:44:03 25 4
gpt4 key购买 nike

我目前正在对 Yahtzee 进行编程,并且正在更改玩家姓名。为此,我使用了一个额外的表单,其中有一个 JTable 和一个 JButton

根据表中玩家数量的变化,将创建一个条目,您可以在其中更改名称。只有第二列应该是可编辑的 - 这也有效。

但是,我不知道如何通过按下按钮将第二列中的内容添加到 ArrayList 中,以便我可以继续使用它们。

这是我的自定义TableModel的实现

public class SpielerBenennungTableModel implements TableModel {

private int spielerAnzahl = 0;
private ArrayList<TableModelListener> Listener = new ArrayList<TableModelListener>();

public SpielerBenennungTableModel(int spielerAnzahl){
this.spielerAnzahl = spielerAnzahl;
}

@Override
public int getRowCount() {
return spielerAnzahl;
}

@Override
public int getColumnCount() {
return 2;
}

@Override
public String getColumnName(int arg0) {
if(arg0 == 0){
return "Spieler";
}else{
return "Eigener Name";
}
}

@Override
public Class<?> getColumnClass(int arg0) {
return String.class;
}

@Override
public boolean isCellEditable(int arg0, int arg1) {
if(arg1 == 1){
return true;
}else{
return false;
}
}

@Override
public Object getValueAt(int arg0, int arg1) {
if(arg1 == 0){
return "Spieler: " + (arg0+1);
}else{
return rowData[arg0][arg1];
}
}


@Override
public void setValueAt(Object arg0, int arg1, int arg2) {
}

@Override
public void addTableModelListener(TableModelListener arg0) {
Listener.add(arg0);
}

@Override
public void removeTableModelListener(TableModelListener arg0) {
Listener.remove(arg0);
}

}

最佳答案

试试这个:

在您的 SpielerBenennungTableModel 中您需要一个对象来保存您显示的数据。我们将使用List<String[]>应该看起来像这样(我将其命名为 rows ):

[
["Spieler: 1", "Bob"],
["Spieler: 2", "John"]
]

每次更改值时,setValueAt方法被调用并将更新 List<String[]>具有正确的值。

然后当您使用getValueAt时方法,它将从相同的 List<String[]> 中读取

class SpielerBenennungTableModel implements TableModel {

private int spielerAnzahl = 0;
private ArrayList<TableModelListener> Listener = new ArrayList<TableModelListener>();

// this will hold the data for every rows
private List<String[]> rows;

public SpielerBenennungTableModel(int spielerAnzahl){
this.spielerAnzahl = spielerAnzahl;

// initialize the list so that all rows are
// ["Spieler: n", ""]
rows = new ArrayList<>();
for(int i = 0; i<spielerAnzahl; i++) {
this.rows.add(new String[] { "Spieler: " + (i+1), "" });
}
}

@Override
public int getRowCount() {
return spielerAnzahl;
}

@Override
public int getColumnCount() {
return 2;
}

@Override
public String getColumnName(int col) {
return col == 0 ? "Spieler" : "Eigener Name";
}

@Override
public Class<?> getColumnClass(int col) {
return String.class;
}

@Override
public boolean isCellEditable(int row, int col) {
return col == 1;
}

@Override
public Object getValueAt(int row, int col) {
return rows.get(row)[col];
}

@Override
public void setValueAt(Object value, int row, int col) {
rows.get(row)[col] = value.toString();
}

@Override
public void addTableModelListener(TableModelListener arg0) {
Listener.add(arg0);
}

@Override
public void removeTableModelListener(TableModelListener arg0) {
Listener.remove(arg0);
}
}

关于java - 将 JTable 值保存在 ArrayList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58835417/

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