【发布时间】:2018-12-03 01:21:48
【问题描述】:
一个简单的问题:
我正在尝试将一些信息从 CSV 导入到位于我的程序的摆动面板上的 jtable 中。
我已使用 inputstream 将信息导入 actionListener 并使用 bufferedreader 对其进行解析。之后我只是使用了一个简单的 while 循环来添加到 Jtable 中。但是,当我运行该应用程序时,我的 jtable 中没有显示任何信息。
当我尝试调试程序时,在两个 jpanel(以及它们上的其他信息)之间切换没有问题,它只是我的 jtable 显示为空。
这是我的代码:
public class wert extends JFrame {
private JPanel contentPane;
private JPanel panel;
private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
wert frame = new wert();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public wert() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 925, 486);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
Path filePath = Paths.get("\\test folder\\newNeetest.csv\\");
InputStream input = null;
input = Files.newInputStream(filePath);
BufferedReader reader = new BufferedReader (new InputStreamReader(input));
DefaultTableModel model = (DefaultTableModel)table.getModel();
Object [] lines = reader.lines().toArray();
for (int q =0; q > lines.length; q++) {
String dsa = lines[q].toString();
String [] dataRow = dsa.split(",");
model.addRow(dataRow);
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
);
contentPane.add(btnNewButton, BorderLayout.NORTH);
panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
table = new JTable();
GroupLayout gl_panel = new GroupLayout(panel);
gl_panel.setHorizontalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panel.createSequentialGroup()
.addGap(475)
.addComponent(table, GroupLayout.PREFERRED_SIZE, 230, GroupLayout.PREFERRED_SIZE)
.addContainerGap(188, Short.MAX_VALUE))
);
gl_panel.setVerticalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup()
.addContainerGap()
.addComponent(table, GroupLayout.DEFAULT_SIZE, 0, Short.MAX_VALUE)
.addGap(375))
);
panel.setLayout(gl_panel);
}
}
【问题讨论】:
-
您如何知道数据已添加到 TableModel 中?您如何知道您的方法正在引用 GUI 上可见的表。也许您创建了 JTable 的两个实例。
-
这不是一个简单的问题,因为您要帮助调试我们无法编译、运行或测试的代码。如果您没有很快得到解决方案,请考虑将有效的minimal reproducible example 程序作为代码格式的文本(正如您在此处使用代码 sn-p 所做的那样)与您的问题一起发布。这为我们提供了帮助找出问题及其解决方案的最佳机会。
-
@camickr 虽然我的应用程序中有多个表,但默认表模型是引用表 3,这是我正在处理的面板中唯一的表......除非我错过了什么?
-
@Leemim,1) 我问了你两个问题。 2)您更新的代码仍然没有告诉我们任何信息。 a) 我们不知道您在哪里创建表格。 b) 它不是“MCVE”。我们无法编译/测试代码,也无权访问您的文件。因此,在“MCVE”中,您应该将硬编码数据添加到模型中。一旦你证明它有效,你就可以从文件中获取数据。在您的“MCVE”中,我们不关心您的其他表,只关心导致问题的表。
-
除了@HovercraftFullOfEels 关于创建 MCVE 的建议之外,删除外部数据文件并用硬编码的
String替换它,而不是只包含两行数据。顺便说一句“将 CSV 导入 Jpanel 上的 JTable(无 CSVReader)” 到您实现这一点时,您将至少拥有一个简单的 CSV 阅读器。
标签: java arrays swing events windowsbuilder