如何使用 OOP 概念将 arraylist 对象设置为 table
how to set arraylist object to table using OOP concept
我在从数据库获取值的方法中创建了一个 OrderModel
对象,并将其设置为 JTable
。我想知道如何使用此代码将此创建的对象设置为 JTable
:
tblOrderItems.setModel(DbUtils.resultSetToTableModel());
这是我的代码:
private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt) {
int raw = tblOrderList.getSelectedRow();
OrderModel or;
String item;
Double qty,amount,total;
ArrayList<OrderModel> arrOrder = new ArrayList<OrderModel>();
String selectedRaw = tblOrderList.getModel().getValueAt(raw, 0).toString();
String sql = "select item,qty,amount from orderdetails where orderid='"+selectedRaw+"'";
con = new DBconnector().connect();
try {
ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()){
or = new OrderModel();
or.setItem(rs.getString("item"));
or.setQty(rs.getDouble("qty"));
or.setAmount(rs.getDouble("amount"));
arrOrder.add(or);
DefaultTableModel tblModel = new DefaultTableModel();
// wanted to set ArrayList to table+
tblOrderItems.setModel(DbUtils.resultSetToTableModel());
}
} catch (Exception e) {
e.printStackTrace();
}
}
首先创建您自己的 TableModel
,它可以管理您的 OrderModel
class,它代表 table...
中的单独一行
public static class OrderTableModel extends AbstractTableModel {
protected static final String[] COLUMN_NAMES = {"Item", "Qty", "Amount"};
private List<OrderModel> rows;
public OrderTableModel(List<OrderModel> rows) {
this.rows = new ArrayList<>(rows);
}
@Override
public int getRowCount() {
return rows.size();
}
@Override
public int getColumnCount() {
return COLUMN_NAMES.length;
}
@Override
public String getColumnName(int column) {
return COLUMN_NAMES[column];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
OrderModel row = rows.get(rowIndex);
switch (columnIndex) {
case 0:
value = row.getItem();
break;
case 1:
value = row.getQty();
break;
case 2:
value = row.getAmount();
break;
}
return value;
}
}
然后你可以使用类似...
private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt) {
int raw = tblOrderList.getSelectedRow();
OrderModel or;
String item;
Double qty, amount, total;
ArrayList<OrderModel> arrOrder = new ArrayList<OrderModel>();
String selectedRaw = tblOrderList.getModel().getValueAt(raw, 0).toString();
String sql = "select item,qty,amount from orderdetails where orderid=?";
con = new DBconnector().connect();
try (PreparedStatement ps = con.prepareStatement(sql)) {
ps.setString(1, selectedRaw);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
or = new OrderModel();
or.setItem(rs.getString("item"));
or.setQty(rs.getDouble("qty"));
or.setAmount(rs.getDouble("amount"));
arrOrder.add(or);
}
OrderTableModel model = new OrderTableModel(arrOrder);
tblOrderItems.setModel(model);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
简单地加载 ArrayList
中的项目,然后将其传递给 OrderTableModel
的实例,然后应用于 JTable
查看 How to Use Tables 了解有关使用您自己的自定义模型的更多详细信息。
查看 Using Prepared Statements 以了解有关如何使用 PreparedStatement
s
的更多详细信息
查看 The try-with-resources Statement 了解有关如何更好地管理数据库(和其他)资源的更多详细信息
我在从数据库获取值的方法中创建了一个 OrderModel
对象,并将其设置为 JTable
。我想知道如何使用此代码将此创建的对象设置为 JTable
:
tblOrderItems.setModel(DbUtils.resultSetToTableModel());
这是我的代码:
private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt) {
int raw = tblOrderList.getSelectedRow();
OrderModel or;
String item;
Double qty,amount,total;
ArrayList<OrderModel> arrOrder = new ArrayList<OrderModel>();
String selectedRaw = tblOrderList.getModel().getValueAt(raw, 0).toString();
String sql = "select item,qty,amount from orderdetails where orderid='"+selectedRaw+"'";
con = new DBconnector().connect();
try {
ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()){
or = new OrderModel();
or.setItem(rs.getString("item"));
or.setQty(rs.getDouble("qty"));
or.setAmount(rs.getDouble("amount"));
arrOrder.add(or);
DefaultTableModel tblModel = new DefaultTableModel();
// wanted to set ArrayList to table+
tblOrderItems.setModel(DbUtils.resultSetToTableModel());
}
} catch (Exception e) {
e.printStackTrace();
}
}
首先创建您自己的 TableModel
,它可以管理您的 OrderModel
class,它代表 table...
public static class OrderTableModel extends AbstractTableModel {
protected static final String[] COLUMN_NAMES = {"Item", "Qty", "Amount"};
private List<OrderModel> rows;
public OrderTableModel(List<OrderModel> rows) {
this.rows = new ArrayList<>(rows);
}
@Override
public int getRowCount() {
return rows.size();
}
@Override
public int getColumnCount() {
return COLUMN_NAMES.length;
}
@Override
public String getColumnName(int column) {
return COLUMN_NAMES[column];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
OrderModel row = rows.get(rowIndex);
switch (columnIndex) {
case 0:
value = row.getItem();
break;
case 1:
value = row.getQty();
break;
case 2:
value = row.getAmount();
break;
}
return value;
}
}
然后你可以使用类似...
private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt) {
int raw = tblOrderList.getSelectedRow();
OrderModel or;
String item;
Double qty, amount, total;
ArrayList<OrderModel> arrOrder = new ArrayList<OrderModel>();
String selectedRaw = tblOrderList.getModel().getValueAt(raw, 0).toString();
String sql = "select item,qty,amount from orderdetails where orderid=?";
con = new DBconnector().connect();
try (PreparedStatement ps = con.prepareStatement(sql)) {
ps.setString(1, selectedRaw);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
or = new OrderModel();
or.setItem(rs.getString("item"));
or.setQty(rs.getDouble("qty"));
or.setAmount(rs.getDouble("amount"));
arrOrder.add(or);
}
OrderTableModel model = new OrderTableModel(arrOrder);
tblOrderItems.setModel(model);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
简单地加载 ArrayList
中的项目,然后将其传递给 OrderTableModel
的实例,然后应用于 JTable
查看 How to Use Tables 了解有关使用您自己的自定义模型的更多详细信息。
查看 Using Prepared Statements 以了解有关如何使用 PreparedStatement
s
查看 The try-with-resources Statement 了解有关如何更好地管理数据库(和其他)资源的更多详细信息