将数据添加到JTable部分代码,转换问题

时间:2016-10-17 15:53:19

标签: java swing jtable defaulttablemodel

我正在尝试在已经创建的表中输入一行,我在这个网站上找到了一个解决方案,但它对我不起作用。我提取了“JTable部分代码”并创建了一个新类,它是以下一个:

var today= new Date();
var hourNow = today.getHours();
var greeting;
if (hourNow > 18) {
greeting= 'Good evening!';
else if (hourNow > 12) {
greeting = ' Good afternoon!';
else if (hourNow > 0) {
greeting = 'Good morni ng!';
else {
greeting = 'Welcome! ' ;
}
document .write( ' <h3>' +greeting + ' </ h3> '); 

}

出现的错误是下一个错误:

线程“main”中的异常java.lang.ClassCastException:javax.swing.JTable $ 1无法强制转换为javax.swing.table.DefaultTableModel

我知道这是一个投射问题,但这是我在互联网上创立的唯一解决方案。 我需要在一个周期内多次输入数据,所以我不知道另一个“输入设计”,有人可以帮我吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

您需要创建一个DefaultTableModel并将表的模型设置为它。 然后,您可以在您创建的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);
}

答案 1 :(得分:1)

$builder
    ->add('title', TextType::class)
    ->add('answers', CollectionType::class, array(
            'entry_type'    => AnswerType::class,
            'allow_add'     => true,
            'allow_delete'  => true,
            'by_reference' => false,
            'cascade_validation' => true // <========= THIS
        ));

使用两个数组创建表时,JTable使用内部类作为TableModel,而不是DefaultTableModel。

如果您想使用JTable tabTokens = new JTable(datac1, columnToken); ,那么代码应该是:

DefaultTableModel

现在,当您访问DefaultTableModel model = new DefaultTableModel(data, column); JTable table = new JTable( model ); 的{​​{1}}时,它将是TableModel,您可以使用JTable方法。