Swing Jtable使用新数据刷新 我有一个加载按钮,它将数据加载到jtable中 我能够将新数据加载到jtable
但是当我重新加载数据并单击jcheckbox时,旧数据就会出现。 我使用的是defaulttablemodel选项。 请运行程序,并帮助我哪里出了问题Swing Jtable使用新数据刷新 我有一个加载按钮,它将数据加载到jtable中 我能够将新数据加载到jtable,swing,jtable,jcheckbox,Swing,Jtable,Jcheckbox,但是当我重新加载数据并单击jcheckbox时,旧数据就会出现。 我使用的是defaulttablemodel选项。 请运行程序,并帮助我哪里出了问题 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.sw
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class MainWindow extends JFrame {
JTable table;
private static final int CHECK_COL = 3;
String[] columnNames = {
"Country", "Capital", "Population in Millions", "Democracy"};
Object[][] data = {
{"USA", "Washington DC", 280, false},
{"Canada", "Ottawa", 32, false},
{"United Kingdom", "London", 60, false},
{"Germany", "Berlin", 83, false},
{"France", "Paris", 60, false},
{"Norway", "Oslo", 4.5, false},
{"India", "New Deli", 1046, false}
};
DefaultTableModel dtm ;
// static JScrollPane scrollpane= new JScrollPane();
public MainWindow() {
setTitle("Marking of data");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button1 = new JButton("load");
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(dtm!=null){
System .out .println("NOT EMPTY");
int c = dtm.getRowCount();
// for (int i=c-1; i>=0; i--)
// {
// dtm.removeRow(i);
// table.revalidate();
// }
loadtable();
}
if(dtm==null){
System .out .println("EMPTY");
loadtable();
}
}
});
JButton button = new JButton("check");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int row = 0; row < table.getRowCount(); row++) {
Boolean b = ((Boolean) table.getValueAt(row, CHECK_COL));
if (b.booleanValue()) {
System.out.print("row " + row + " is " + b + ": ");
for (int col = 0; col < table.getColumnCount(); col++) {
System.out.print(table.getValueAt(row, col) + " ");
}
System.out.println();
}
}
}
});
JPanel buttonpanel1 = new JPanel();
buttonpanel1.add(button1);
JPanel buttonpanel = new JPanel();
buttonpanel.add(button);
add(buttonpanel, BorderLayout.SOUTH);
add(buttonpanel1, BorderLayout.NORTH);
pack();
setLocationByPlatform(true);
setVisible(true);
}
public void loadtable(){
dtm = new DefaultTableModel(data, columnNames) {
@Override
public Class getColumnClass(int col) {
return getValueAt(0, col).getClass();
}
@Override
public boolean isCellEditable(int rowIndex, int colIndex) {
return (colIndex == CHECK_COL);
}
};
table = new JTable(dtm);
JScrollPane scrollpane = new JScrollPane(table);
add(scrollpane, BorderLayout.CENTER);
pack();
setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new MainWindow();
}
});
}
}
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
公共类主窗口扩展JFrame{
JTable表;
专用静态最终整数检查\u COL=3;
字符串[]列名称={
“国家”、“首都”、“百万人口”、“民主”};
对象[][]数据={
{“美国”,“华盛顿特区”,280,假},
{“加拿大”、“渥太华”,32,假},
{“联合王国”、“伦敦”,60,假},
{“德国”、“柏林”,83,假},
{“法国”,“巴黎”,60,假},
{“挪威”、“奥斯陆”,4.5,假},
{“印度”,“新熟食店”,1046,假}
};
数字地面模型;
//静态JScrollPane scrollpane=新的JScrollPane();
公共主窗口(){
setTitle(“数据标记”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button1=新JButton(“加载”);
button1.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
如果(dtm!=null){
System.out.println(“非空”);
int c=dtm.getRowCount();
//对于(int i=c-1;i>=0;i--)
// {
//dtm.removeRow(i);
//表.重新验证();
// }
loadtable();
}
如果(dtm==null){
System.out.println(“空”);
loadtable();
}
}
});
JButton按钮=新JButton(“检查”);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
对于(int row=0;row
需要帮助。pls默认表格模型将数据从二维数组复制到其自身的向量中 每次按“加载”按钮时,都会使用相同的数据创建一个新的默认表格模型,并对新表格模型的向量进行新的复制 每次按下“加载”按钮时,您的代码都会重置表格模型,因此当然会显示旧数据