Java 如何从.dat文件读取并填充到JTable中?
我需要从Java 如何从.dat文件读取并填充到JTable中?,java,swing,jtable,edt,Java,Swing,Jtable,Edt,我需要从scores.dat文件中读取数据,并将其弹出到JTable,以下是更多信息: 得分。dat看起来像 Team Name Score1 Score2 Red John 55 7 Blue Michael 33 6 Green Burrs 55 5 位置=C:\Documents\scores.dat 第一行是列名。所以需要将列名弹出到表的第一行 Scores.dat是动态的,通过用户操作添加/删除行 此外,我需
scores.dat
文件中读取数据,并将其弹出到JTable
,以下是更多信息:
得分。dat
看起来像
Team Name Score1 Score2
Red John 55 7
Blue Michael 33 6
Green Burrs 55 5
位置=C:\Documents\scores.dat
Scores.dat
是动态的,通过用户操作添加/删除行import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
/**
*
* @author singh_000
*/
public class SampleJTableDemo extends JFrame implements ActionListener {
/**
* Creates new form OrderMateRequestForm
*/
public SampleJTableDemo() {
initComponents();
}
private void initComponents() {
//headers for the table
String[] columns = new String[]{
"Team", "Name", "Score1", "Score2"//Todo: pop names from 1st row from scores.dat
};
//actual data for the table in a 2d array
Object[][] data = new Object[][]{
{"Red", "John", 40.0, 7},
{"Blue", "Rambo", 70.0, 6},
{"Gree", "Zorro", 60.0, 7},
{"Black", "Curran", 70.0, 5},};
final Class[] columnClass = new Class[]{
String.class, String.class, Double.class, Integer.class
};
//create table model with data
DefaultTableModel model = new DefaultTableModel(data, columns) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return columnClass[columnIndex];
}
};
JTable table = new JTable(model);
Container contentPane = this.getContentPane();
contentPane.setLayout(new FlowLayout());
// contentPane.add(table);
JScrollPane scrollPane = new JScrollPane(table);
contentPane.add(scrollPane);
JSeparator separator = new JSeparator();
separator.setVisible(true);
contentPane.add(separator);
//add the table to the frame
// this.add(new JScrollPane(table));
//ToDO: Add buton for top scorer
JButton button = new JButton("Top Scorer");
button.setVisible(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
this.setTitle("Score-List");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new SampleJTableDemo();
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
导入java.awt.Container;
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.jsepator;
导入javax.swing.JTable;
导入javax.swing.SwingUtilities;
导入javax.swing.table.DefaultTableModel;
/**
*
*@作者singh_000
*/
公共类SampleJTableDemo扩展JFrame实现ActionListener{
/**
*创建新表单OrderMateRequestForm
*/
公共样本tabledemo(){
初始化组件();
}
私有组件(){
//表的标题
字符串[]列=新字符串[]{
“团队”、“名称”、“分数1”、“分数2”//Todo:scores.dat中第一行的pop名称
};
//二维数组中表格的实际数据
对象[][]数据=新对象[][]{
{“红色”,“约翰”,40.0,7},
{“蓝色”,“兰博”,70.0,6},
{“格力”,“佐罗”,60.0,7},
{“黑色”,“柯伦”,70.0,5},};
最终类[]列类=新类[]{
String.class、String.class、Double.class、Integer.class
};
//使用数据创建表模型
DefaultTableModel=新的DefaultTableModel(数据、列){
@凌驾
公共布尔值可编辑(int行,int列){
返回false;
}
@凌驾
公共类getColumnClass(int columnIndex){
返回columnClass[columnIndex];
}
};
JTable table=新的JTable(模型);
容器contentPane=this.getContentPane();
setLayout(新的FlowLayout());
//contentPane.add(表);
JScrollPane scrollPane=新的JScrollPane(表);
添加(滚动窗格);
jsepator separator=新的jsepator();
separator.setVisible(true);
contentPane.add(分隔符);
//将表格添加到框架中
//添加(新的JScrollPane(表));
//ToDO:为最佳射手添加buton
JButton button=新JButton(“得分最高者”);
按钮。设置可见(真);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
}
});
本文件的标题为“得分列表”;
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个包();
此.setVisible(true);
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
新的SampleJTableDemo();
}
});
}
@凌驾
已执行的公共无效操作(操作事件e){
}
}
当我读取第一行时,我试图设置团队参数,但得到的NumberFormat异常为Team。SetCore1(int)需要整数,而BufferReader中的readLine()包含字符串(列名)
因此,当您读取第一行时,您将数据解析为字符串
String[] columnNames = line.split(" ");
读取其他行时,需要将字符串数据转换为正确的数据类型:
String[] lineData = theNextLine.split(" " );
String team = lineData[0];
String name = lineData[1];
Double score1 = Double.parseDouble( lineData[2] );
Integer score2 = Integer.parseInt( lineData[3] );
现在,您可以使用DefaultTableModel的addRow(…)方法将数据添加到表中。欢迎使用堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。具体来说:你不只是发布你的作业和一些代码;然后期望我们阅读您的所有代码,以了解它与您的家庭作业不匹配的确切位置。到目前为止,这是这样写的:“这是我老师给我的模板。用代码填充它”。不。为了让人们更容易测试@GhostCat建议的数据,假设数据已经被读入MCVE中的
字符串和字符串的硬代码中。将数据限制为仅两个条目以保持其简短。顺便说一句-“从.dat文件读取并填充到JTable?”-您在读取或填充哪个部分有问题?如果“都是”,则需要将问题分为两部分,并分别处理。@andrewhompson填充数据,因为.dat文件的第一行是所有字符串(列名),后续行也包含整数。我使用BufferReader读取数据。当我创建团队对象时(参数名,score1,score2)。当我阅读第一行时,我试图设置团队参数,但作为团队获取NumberFormat异常。setScore1(int)需要整数,而BufferReader中的readLine()包含字符串(列名)。请关注一个问题。