我需要一些关于JTable的帮助。我试图从" Contact.txt"中读取数据。使用该数据文件并填充我的表。我可以正确地从文件中获取数据,同时添加到Object [] [] 2D数组没有任何问题。当我尝试将此Object数组添加到表时不会发生任何事情。 抱歉我的英语不好。
Contacts.txt文件包括"姓名","姓氏","电话号码","电子邮件"第
此类读取文本并将其添加到Object:
public class ReadFromText {
public boolean ReadTable(Object [][] data) {
boolean status = false;
File file = new File("/Users/MacbookPro/Documents/Contacts.txt");
BufferedReader bf = null;
FileReader fileReader = null;
try {
fileReader = new FileReader(file);
bf = new BufferedReader(fileReader);
String textLine = null;
String [] text = null;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < 4; j++) {
while ((textLine = bf.readLine()) != null) {
text = textLine.split(" ");
data[i][j] = text[j];
status = true;
System.out.println(data[i][j]);
}
}
}
bf.close();
} catch (IOException e) {
System.err.println(e.getMessage());
}
return status;
}
}
这部分代码来自主类:
Object [][]datas = new Object[10][4];
ReadFromText r = new ReadFromText(); //new object from ReadData class
if(r.ReadTable(datas)== true){
System.out.println("OK");//just for to be sure
}else{
System.out.println("NO");
}
model = new DefaultTableModel(datas, columNames);
table = new JTable(model);
table.setFont(new Font("Monospaced", Font.PLAIN, 13));
table.setBackground(new Color(245, 245, 245));
table.setRowHeight(25);
table.setMinimumSize(new Dimension(60, 20));
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
它&#39;返回&#34;好的&#34;从here
查看但是JTable是空的! :从this picture
查看我希望任何人都可以帮助我。 感谢所有人
答案 0 :(得分:1)
我希望这个答案可以帮助您找到问题所在。它还旨在证明发布MCVE的重要性,如下所示:
mport java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel;
public class TestTable extends JFrame {
public TestTable() {
super("Main");
setSize(400, 300);
Object [][]datas = new Object[][]{
{"A1", "A2","A3","A4"},
{"B1", "B2","B3","B4"}
};
Object[] columNames = {"Name","LastName","Phone Num","Email"};
DefaultTableModel model = new DefaultTableModel(datas, columNames );
JTable table = new JTable(model);
table.setBackground(new Color(245, 245, 245));
table.setRowHeight(25);
table.setMinimumSize(new Dimension(60, 20));
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
add(new JScrollPane(table));
setVisible(true);
}
public static void main(String[] args) {
new TestTable();
}
}
不仅MCVE可以帮助您获得更好,更快的响应,在很多情况下,就像这一样,它可以帮助您确定问题并自己解决。
删除对于重现问题不重要的所有内容,帮助您(以及曾尝试过帮助的人)专注于问题所在。
在这种情况下,您可以看到消除输入部分,您可以看到JTable
正常工作。
答案 1 :(得分:1)
从文件中读取数据的代码是错误的。想一想。您使用值0启动外部循环,然后使用值为0的内部循环,然后使用while循环读取整个文件。
您希望逻辑读取单行数据,拆分该行并添加然后将数据添加到数组中。所以逻辑应该是这样的:
int row = 0;
while ((String textLine = bf.readLine()) != null)
{
String text = textLine.split(" ");
for (int i = 0; i < text.length; i++)
{
data[row][i] = text[i];
}
row++
}
但是,您不应该使用Arrays来保存数据。您永远不应该硬编码数据结构的大小,因为它不允许您添加新数据。相反,您应该使用Vector来读取数据。那么你有10行数据或100行无所谓。
使用这种方法代码就像:
Vector data = new Vector();
while ((String textLine = bf.readLine()) != null)
{
String text = textLine.split(" ");
Vector row = new Vector();
for (int i = 0; i < text.length; i++)
{
row.addElement( text[i] );
}
}
因此您需要更改方法以返回数据向量。您还需要更改要添加到Vector的“columnNames”,以便使用两个Vector创建TableModel。