gpt4 book ai didi

java - 当将值设置为特定列时,JTable Java 错误堆栈溢出

转载 作者:行者123 更新时间:2023-11-29 05:12:49 30 4
gpt4 key购买 nike

下面是我的代码。我创建了一个包含 4 列和 3 行的 Jtable。并添加表模型监听器,在表更改监听器中,当我在特定列中设置值时,堆栈溢出错误即将到来。

**error is Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.nio.Buffer.<init>(Buffer.java:189)
at java.nio.CharBuffer.<init>(CharBuffer.java:276)
at java.nio.HeapCharBuffer.<init>(HeapCharBuffer.java:70)
at java.nio.CharBuffer.wrap(CharBuffer.java:369)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:265)**

代码是:

打包测试;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class TableModelListenerDemo {

public static void main(String args[]) {

final Object rowData[][] = {{"1", "one", "I",null}, {"2", "two", "II",null}, {"3", "three", "III",null}};
final String columnNames[] = {"#", "English", "Roman", "Test"};

final JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
table.getModel().addTableModelListener(new TableModelListener() {

@Override
public void tableChanged(TableModelEvent e) {
try {
System.out.println(e);
int row = table.getSelectedRow();
Object QTY = table.getValueAt(row, 0);
Object UPrice = table.getValueAt(row, 1);
Object Three = table.getValueAt(row, 2);
table.setValueAt(Three, row, 3);
}catch(Exception ex){

}

}
});

table.setValueAt("", 0, 0);
JFrame frame = new JFrame("Resizing Table");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(scrollPane, BorderLayout.CENTER);

frame.setSize(300, 150);
frame.setVisible(true);

}
}

最佳答案

JTable#setValueAt 将调用 TableModel#setValueAt,这将触发 TableChanged 事件,这就是它导致您 的原因StackOverflowException(陷入死循环)

更好的解决方案是覆盖 TableModel#setValueAt 并且如果列 012 已更新,还计算列 3 的值,但不要忘记触发 cellUpdated 事件

关于java - 当将值设置为特定列时,JTable Java 错误堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754483/

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