как печатать целочисленное значение, полученное из mongodb в jtable?

120
7

Я пытаюсь напечатать целочисленные значения (которые хранятся в 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
}

Я могу печатать строковые значения, такие как productname, brand и srno.but, я не могу печатать целые значения, такие как рейтинги, функции и т.д.

Вот код:

    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?

спросил(а) 2021-01-19T14:55:15+03:00 9 месяцев, 1 неделя назад
1
Решение
64

Поскольку данные добавляются в массив объектов, вы j\Just обрабатываете все как объект:

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, что типы данных для каждого столбца, поэтому вам нужно переопределить метод getColumnClass(...) в TableModel.

Некоторый общий код:

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;
}
}
};

ответил(а) 2021-01-19T14:55:15+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема