将数据添加到 JTable 部分代码,转换问题
Add data to JTable section code, casting issue
我想在已经创建的 Table 中输入一行,我在这个网站上找到了一个解决方案,但它对我不起作用。我提取了 'JTable section code' 并创建了一个新的 class,它是下面的:
public static void main(String[] args) {
String[] columnToken = {"No. consecutivo", "Token", "Lexema", "No. de linea"};
String[] columnError = {"No. consecutivo", "Error", "No. de linea"};
Object[][] datac1= {};
Object[][] datac2= {};
JTable tabTokens = new JTable(datac1, columnToken);
JTable tabError = new JTable(datac2, columnError);
JFrame frameTokens = new JFrame("JTable Tokens Display");
JFrame frameError = new JFrame("JTable Errors Display");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JScrollPane tokenTabContainer = new JScrollPane(tabTokens);
JScrollPane errorTabContainer = new JScrollPane(tabError);
panel.add(tokenTabContainer, BorderLayout.CENTER);
frameTokens.getContentPane().add(panel);
panel.add(errorTabContainer, BorderLayout.CENTER);
frameError.getContentPane().add(panel);
for(int i=0; i<4; i++) {
DefaultTableModel token100 = (DefaultTableModel) tabTokens.getModel();
token100.addRow(new Object[]{"Hola", 100, 196, "adios"});
DefaultTableModel token101 = (DefaultTableModel) tabTokens.getModel();
token101.addRow(new Object[]{"Hola", 100, 196, "adios"});
DefaultTableModel token102 = (DefaultTableModel) tabTokens.getModel();
token102.addRow(new Object[]{"Hola", 100, 196, "adios"});
}
frameTokens.pack();
frameTokens.setVisible(true);
//frameError.pack();
//frameError.setVisible(true);
}
}
出现的错误是下一个:
线程 "main" java.lang.ClassCastException 中的异常:javax.swing.JTable$1 无法转换为 javax.swing.table.DefaultTableModel
我知道这是一个转换问题,但这是我在互联网上找到的唯一解决方案。
我需要在一个循环中多次输入数据,所以我不知道另一个'input design',请问谁能帮帮我吗?
谢谢!
您需要创建一个 DefaultTableModel 并将 table 的模型设置为它。
然后您可以在您创建的 DefaultTableModel 对象上调用 addRow。
public static void main(String[] args) {
String[] columnToken = {"No. consecutivo", "Token", "Lexema", "No. de linea"};
String[] columnError = {"No. consecutivo", "Error", "No. de linea"};
Object[][] datac1= {};
Object[][] datac2= {};
DefaultTableModel dtmTokens = new DefaultTableModel(datac1, columnToken);
DefaultTableModel dtmError = new DefaultTableModel(datac2, columnError);
JTable tabTokens = new JTable(dtmTokens);
JTable tabError = new JTable(dtmError);
JFrame frameTokens = new JFrame("JTable Tokens Display");
JFrame frameError = new JFrame("JTable Errors Display");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JScrollPane tokenTabContainer = new JScrollPane(tabTokens);
JScrollPane errorTabContainer = new JScrollPane(tabError);
panel.add(tokenTabContainer, BorderLayout.CENTER);
frameTokens.getContentPane().add(panel);
panel.add(errorTabContainer, BorderLayout.CENTER);
frameError.getContentPane().add(panel);
for(int i=0; i<4; i++) {
dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"});
dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"});
dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"});
}
frameTokens.pack();
frameTokens.setVisible(true);
//frameError.pack();
//frameError.setVisible(true);
}
JTable tabTokens = new JTable(datac1, columnToken);
当您使用两个数组创建 table 时,JTable 使用内部 class 作为 TableModel,而不是 DefaultTableModel。
如果你想使用 DefaultTableModel
那么代码应该是这样的:
DefaultTableModel model = new DefaultTableModel(data, column);
JTable table = new JTable( model );
现在,当您访问 JTable
的 TableModel
时,它将是 DefaultTableModel
,您可以使用 addRow(...)
方法。
我想在已经创建的 Table 中输入一行,我在这个网站上找到了一个解决方案,但它对我不起作用。我提取了 'JTable section code' 并创建了一个新的 class,它是下面的:
public static void main(String[] args) {
String[] columnToken = {"No. consecutivo", "Token", "Lexema", "No. de linea"};
String[] columnError = {"No. consecutivo", "Error", "No. de linea"};
Object[][] datac1= {};
Object[][] datac2= {};
JTable tabTokens = new JTable(datac1, columnToken);
JTable tabError = new JTable(datac2, columnError);
JFrame frameTokens = new JFrame("JTable Tokens Display");
JFrame frameError = new JFrame("JTable Errors Display");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JScrollPane tokenTabContainer = new JScrollPane(tabTokens);
JScrollPane errorTabContainer = new JScrollPane(tabError);
panel.add(tokenTabContainer, BorderLayout.CENTER);
frameTokens.getContentPane().add(panel);
panel.add(errorTabContainer, BorderLayout.CENTER);
frameError.getContentPane().add(panel);
for(int i=0; i<4; i++) {
DefaultTableModel token100 = (DefaultTableModel) tabTokens.getModel();
token100.addRow(new Object[]{"Hola", 100, 196, "adios"});
DefaultTableModel token101 = (DefaultTableModel) tabTokens.getModel();
token101.addRow(new Object[]{"Hola", 100, 196, "adios"});
DefaultTableModel token102 = (DefaultTableModel) tabTokens.getModel();
token102.addRow(new Object[]{"Hola", 100, 196, "adios"});
}
frameTokens.pack();
frameTokens.setVisible(true);
//frameError.pack();
//frameError.setVisible(true);
}
}
出现的错误是下一个:
线程 "main" java.lang.ClassCastException 中的异常:javax.swing.JTable$1 无法转换为 javax.swing.table.DefaultTableModel
我知道这是一个转换问题,但这是我在互联网上找到的唯一解决方案。 我需要在一个循环中多次输入数据,所以我不知道另一个'input design',请问谁能帮帮我吗? 谢谢!
您需要创建一个 DefaultTableModel 并将 table 的模型设置为它。 然后您可以在您创建的 DefaultTableModel 对象上调用 addRow。
public static void main(String[] args) {
String[] columnToken = {"No. consecutivo", "Token", "Lexema", "No. de linea"};
String[] columnError = {"No. consecutivo", "Error", "No. de linea"};
Object[][] datac1= {};
Object[][] datac2= {};
DefaultTableModel dtmTokens = new DefaultTableModel(datac1, columnToken);
DefaultTableModel dtmError = new DefaultTableModel(datac2, columnError);
JTable tabTokens = new JTable(dtmTokens);
JTable tabError = new JTable(dtmError);
JFrame frameTokens = new JFrame("JTable Tokens Display");
JFrame frameError = new JFrame("JTable Errors Display");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JScrollPane tokenTabContainer = new JScrollPane(tabTokens);
JScrollPane errorTabContainer = new JScrollPane(tabError);
panel.add(tokenTabContainer, BorderLayout.CENTER);
frameTokens.getContentPane().add(panel);
panel.add(errorTabContainer, BorderLayout.CENTER);
frameError.getContentPane().add(panel);
for(int i=0; i<4; i++) {
dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"});
dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"});
dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"});
}
frameTokens.pack();
frameTokens.setVisible(true);
//frameError.pack();
//frameError.setVisible(true);
}
JTable tabTokens = new JTable(datac1, columnToken);
当您使用两个数组创建 table 时,JTable 使用内部 class 作为 TableModel,而不是 DefaultTableModel。
如果你想使用 DefaultTableModel
那么代码应该是这样的:
DefaultTableModel model = new DefaultTableModel(data, column);
JTable table = new JTable( model );
现在,当您访问 JTable
的 TableModel
时,它将是 DefaultTableModel
,您可以使用 addRow(...)
方法。