从JTable读取数据

问题描述 投票:0回答:2

我需要从BookInfo表中获取BookID。当我按下ADD按钮时,会弹出预约窗口,并在表格中写入BookID,颁发日期和返回日期。所以我需要将BookID作为Object传递给Reservation。

我尝试创建一个新的图书信息实例,或者将一个字符串传递给预订...

//for BookInfo:
public void addRow(Object[] objToAdd)
    {
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.addRow(objToAdd);
    }
...

        JButton btnAdd = new JButton("Add");
        btnAdd.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, new Color(0, 0, 0), new Color(0, 0, 0)));
        btnAdd.setOpaque(true);
        btnAdd.setFont(new Font("American Typewriter", Font.PLAIN, 18));
        btnAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Reservation.reserve(/*Object bookID*/);
            }
        });
String[] columnNames = {" Book ID", " Title ", " Author", " Genre", " Date Published ", " Availability"}; // table layout

//for Reservation:
public void reserve(Object[] bookID)
    {
        String issuedDate = new SimpleDateFormat("yyyy.MM.dd").format(new Date());

        Calendar c = Calendar.getInstance();
        c.setTime(new Date()); 
        c.add(Calendar.DATE, 30); 
        String returnDate = new SimpleDateFormat("yyyy.MM.dd").format(c);


        String[]resInfo = {"Book ID" , issuedDate, returnDate};
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.addRow(resInfo);
    }
java algorithm swing user-interface jtable
2个回答
0
投票

我不确定我了解您的用户界面是什么样的,您想要的行为或当前实施的内容。请在您的描述中更加清楚,并在提问时提供所有相关代码;它不能从创建JButton的时间和地点以及您在该范围内获得的信息中获得,这是回答您的问题所需的一些最重要的信息。

假设您通过遍历表模型并为每一行创建一个按钮来渲染表,那么您已经将actionListener作用域中的BookID作为其中一列的值。您只需将其添加到您的侦听器代码中即可。

类似的替代方法涉及使用按钮的actionCommand将String数据与按钮相关联。然后,您可以从调用actionPerformed方法的ActionEvent中检索此信息。 Here's one example。但我认为没有理由在这里使用这种方法。它只是增加了复杂性,上面的解决方案更加简单和自然。

如果我对你如何创建表的假设是错误的,你可以附加一个mouseListener而不是一个actionListener,比如here,这样你就可以从事件中获取行并访问相关列。


-1
投票

您可以使用以下代码来读取所有jtable数据

     DefaultTableModel model =  (DefaultTableModel) jTable1.getModel();
     Vector data = model.getDataVector();

     for (Object data1 : data) {
         System.out.println(data1);
    }