【问题标题】:how to print integer value retrieved from mongodb into jtable?如何将从mongodb检索到的整数值打印到jtable中?
【发布时间】:2017-05-10 11:04:47
【问题描述】:

我正在尝试将整数值(存储在 MongoDB 中)打印到 jtable 中。 这是 MongoDB 条目之一:

Inserted Document: 108 
{
  "_id": {
    "$oid": "5912effdf9c13f1ab9377eb6"
  },
  "SrNo": "53",
  "Brand": "Vivo",
  "Product Name": "Y51L",
  "Price": 10000,
  "Brand Reputation": 7,
  "Features": 10,
  "Rating": 4
}

我可以打印产品名称、品牌和 srno 等字符串值。但我无法打印评级、功能等整数值。

代码如下:

    JTable table = new JTable();                                                                             
    String[] columns = new String[]{"SrNo","Brand","Product Name","Price"};

    DefaultTableModel model = new DefaultTableModel(columns,0);
    JScrollPane scrollPane = new JScrollPane(table);
    frame2.getContentPane().add(scrollPane, BorderLayout.CENTER);
    frame2.setBounds(100, 100, 677, 392);                                                               
    frame2.setVisible(true);

    frame2.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);



    DBCursor cursor = coll.find();
                 //int i=1;
                 while (cursor.hasNext())
                 {
                     DBObject obj = cursor.next();
                     String SrNo = (String)obj.get("SrNo");
                     //ObjectId id = (ObjectId)obj.get("_id");
                     String Brand = (String)obj.get("Brand");
                     String ProductName = (String)obj.get("Product Name");

                    //String price = (String)obj.get("Price");
                     //String price = Integer.toString((String)obj.get("Price"));
                     //int BrandReputation = Integer.parseInt((String)obj.get("Brand Reputation"));
                     //String brandrep = String.valueOf(BrandReputation);
                     //int Features = Integer.parseInt((String)obj.get("Features"));

                     //int Ratings = Integer.parseInt((String)obj.get("Rating"));

                     model.addRow(new Object[]{SrNo,Brand,ProductName});


                 }
                 table.setModel(model);
                 cursor.close();
                 mongoClient.close();

在 while 循环中,您可以看到注释的代码行,这些都是我尝试打印整数值的所有方法,但都失败了。还有其他方法可以将整数值打印到 jtable 中吗?

【问题讨论】:

  • 有没有其他方法可以将整数值打印到 jtable 中? == getColumnClass,它也需要在数据库端存储正确的数据类型(以避免在运行时出现任何parseXxx)
  • 从未接触过 MongoDB,但是 int BrandReputation = Integer.parseInt((String)obj.get("Brand Reputation")); 在存储整数 "Brand Reputation" : 7 的情况下看起来非常愚蠢和矛盾,AFAIK 几乎所有的 JDBC 都可以正确地接受 data_types

标签: java mongodb swing jframe jtable


【解决方案1】:

由于数据被添加到一个对象数组中,所以您只需将所有内容都视为一个对象:

Object serialNumber = obj.get("SrNo");
Object brand = obj.get("Brand");
Object productName = obj.get("Product Name");
Object price = obj.get("Price");

model.addRow( new Object[] {serialNumber, brand, productName, price} );

现在的诀窍是告诉 TableModel 每一列的数据类型是什么,因此您需要覆盖 TableModel 的 getColumnClass(...) 方法。

一些通用代码是:

DefaultTableModel model = new DefaultTableModel(columns, 0)
{
    @Override
    public Class getColumnClass(int column)
    {
        for (int row = 0; row < getRowCount(); row++)
        {
            Object o = getValueAt(row, column);

            if (o != null)
            {
                return o.getClass();
            }
        }

        return Object.class;
    }
};

或者你可以更具体:

DefaultTableModel model = new DefaultTableModel(columns, 0)
{
    @Override
    public Class getColumnClass(int column)
    {
        switch (column)
        {
            case 3: return Double.class;
            default: return String.class;
        }
    }
};

【讨论】:

  • @cammickr 请告诉我switch case语句中的case编号代表什么?
  • @MikhilDesai,JTable 用于在行和列中显示数据。方法名称为“getColumnClass(...)”,参数名称为“column”。所以这个方法用来告诉表在给定的“列”中包含什么类型的数据,以便表可以使用适当的渲染器。
  • 谢谢它完美的工作......@camickr 你成功了!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
相关资源
最近更新 更多