当前位置: 首页 > 知识库问答 >
问题:

尝试向JTable添加行时出错

邵伟
2023-03-14

每当用户在JOptionPane确认对话框的帮助下被询问是否将产品添加到购物车时选择“是”,我都会尝试将行添加到我的表中。我的代码如下:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class Home {
final static int WINDOW_WIDTH = 500;
final static int WINDOW_HEIGHT = 200;
JFrame window;

    public Home() {
    window = new JFrame();
    window.setTitle("Home");
    window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel title = new JLabel("Please select a book for more information", JLabel.CENTER);
    title.setHorizontalTextPosition(JLabel.CENTER);
    Font plainFont = new Font("Serif", 0, 24);
    title.setFont(plainFont);
    title.setBounds(180, 230, 97, 29);

    //====================================================================//
    String [] bookStrings = {"[Select a book]", "The Host", "Ruby", "Divergent", "The Secret Garden", "Hunger Games"};
    JComboBox bookList = new JComboBox(bookStrings);
    //====================================================================//

    JLabel bookinfo = new JLabel();

    //====================================================================//
    JButton search = new JButton("Search");
    search.setHorizontalTextPosition(JButton.CENTER);

    JButton cart = new JButton("Show Cart");
    search.setHorizontalTextPosition(JButton.CENTER);

    JButton exit = new JButton("Exit");
    search.setHorizontalTextPosition(JButton.CENTER);

    JTable cartTable;
    String[] columns = {"Book Name","Author", "Quantity", "Price"};
    String [][] data = {};
    cartTable = new JTable(data, columns);
    cartTable.setPreferredScrollableViewportSize(new Dimension(450, 63));
    cartTable.setFillsViewportHeight(true);

    JScrollPane jps = new JScrollPane(cartTable);


    //====================================================================//

    search.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {


            if (bookList.getSelectedIndex() == 1) {
                int reply = JOptionPane.showConfirmDialog(null,
                        "<html>Title: The Host <br> Author: Stephenie Meyer <br> Price: 110 AED <br> " +
                                "\n Synopsis: The Host is a romance novel by Stephenie Meyer. The book is about Earth, " +
                                "\n in a post apocalyptic time, being invaded by a parasitic alien race, known as \"Souls\", and " +
                                "\n follows one Soul's predicament when the consciousness of her human host refuses to co-operate " +
                                "\n with the takeover of her body."
                                + "\n \n Would you like to add this to cart?", "Book Details", JOptionPane.YES_NO_OPTION);


                if (reply == JOptionPane.YES_OPTION){
                    String [][] data = {{"The Host", "Stephenie Meyer", "2", "110"}};
                    DefaultTableModel model = (DefaultTableModel)(cartTable.getModel());
                    model.addRow(data);


                }
                else {
                    JOptionPane.showMessageDialog(null, "GOODBYE");
                }


        }
    });

    cart.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            new Cart();
            window.setVisible(false);
        }
    });

    exit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
           System.exit(0);
        }
    });

    //====================================================================//

    JPanel panel;
    panel = new JPanel();
    panel.add(title);

    panel.add(bookList);
    panel.add(search);
    panel.add(bookinfo);
    panel.add(cart);
    panel.add(exit);
    panel.add(jps);



    window.add(panel);
    window.setVisible(true);
}
}

然而,我得到了这个错误:线程“AWT-EventQueue-0”java.lang.ClassCastException:javax.swing中出现异常。JTable$1无法强制转换为javax.swing.table.DefaultTableModel

有人可以帮助我解决我出错的地方吗?谢谢。

共有1个答案

邵羽
2023-03-14
cartTable = new JTable(data, columns);

如果我没记错的话,使用匿名AbstractTableModel。

改为使用:

cartTable = new JTable(new DefaultTableModel(data, columns));

DefaultTableModel触发杂项更改事件并处理动态数据。

 类似资料:
  • 问题内容: 我们有一个简单的项目,我们从套接字读取数据,并希望用即将到来的数据填充表,但是我们找不到找到将行添加到尚未创建的对象的方法,只能在以下位置找到添加行的方法:表的创建时间。 是否可以向中动态添加行,或者有更好的替代对象来处理这种显示数据的方式? 编辑 :非常感谢您的回答。 他们三个看起来都很有前途,但是我只选择一个,我认为最好的就是纪尧姆的。 问题答案: 您应该创建一个自定义。A 实际上

  • 建造Gradle。应用程序部分。 项目部分。 我的文件中没有所有项目部分。这就是为什么我自己添加了这个地方。但是那些在所有项目中定义的 它必须成形。当我尝试引入google()和mavenCentral时,它给出了buildScript中已经定义的错误。当我试图只定义没有定义google()和mavenCentral;Build被配置为首选设置存储库而不是项目存储库,但存储库“maven”是由Bu

  • 这是我的类的全部代码。我正在尝试有一个带有JScrollPane的JTable,我也尝试了在JTable和JScrollPane上设置setVisible。我认为问题可能是我将JScrollPane添加到JPanel而不是JFrame中,但我希望在我的面板上添加该得分表。在我的JPanel(背景)中,我为背景绘制一个图像,仅此而已。 安妮的想法?

  • 我试图安装条带宝石,我得到这个错误 Gem::Ext::BuildError:错误:无法生成Gem本机扩展。 /Users/Fysh/.rvm/rubies/ruby-2.0.0-p643/bin/ruby-r./siteconf20151005-1267-af6sn6.rbextconf.rb检查-lstdc中的main()...*extconf.rb失败*由于某种原因无法创建Makefile,

  • 我有和我在上编写了以下代码,以从选定项中添加行。 如果用户键入了所需的名称并点击了enter,则必须将其添加到jtable,但它不会添加一行。 我认为事件是原因, 通常我们首先从jComboBox中选择项,然后对 事件(例如JButton)进行编码。 所以在这里,我希望jComboBox中考虑所选项事件被添加到JTable中。 那么对于哪一个事件我必须编写代码或另一种方法来处理呢?