Java 如何使用OOP概念将arraylist对象设置为表
我在从DB获取值的方法中创建了一个Java 如何使用OOP概念将arraylist对象设置为表,java,swing,jdbc,arraylist,jtable,Java,Swing,Jdbc,Arraylist,Jtable,我在从DB获取值的方法中创建了一个OrderModel对象,并将其设置为JTable。我想知道如何使用以下代码将创建的对象设置为JTable: tblOrderItems.setModel(DbUtils.resultSetToTableModel()); 这是我的代码: private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt) {
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();
}
}
private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt){
int raw=tblOrderList.getSelectedRow();
订单模型或;
字符串项;
双倍数量、金额、总额;
ArrayList Arroder=新的ArrayList();
字符串selectedRaw=tblOrderList.getModel().getValueAt(原始,0.toString();
String sql=“从orderdetails中选择项目、数量、金额,其中orderid=”+selectedRaw+”;
con=新的DBconnector().connect();
试一试{
ps=con.prepareStatement(sql);
结果集rs=ps.executeQuery();
如果(rs.next()){
或=新的OrderModel();
或.setItem(rs.getString(“item”));
或.设置数量(rs.getDouble(“数量”);
或.设定金额(rs.getDouble(“金额”));
加上(或);
DefaultTableModel tblModel=新的DefaultTableModel();
//想要将ArrayList设置为table+
tblOrderItems.setModel(DbUtils.resultsetTableModel());
}
}捕获(例外e){
e、 printStackTrace();
}
}
首先创建您自己的TableModel
,它可以管理您的OrderModel
类,它表示表中的一行
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;
}
}
公共静态类OrderTableModel扩展了AbstractTableModel{
受保护的静态最终字符串[]列名称={“项目”、“数量”、“金额”};
私有列表行;
public OrderTableModel(列表行){
this.rows=新的ArrayList(行);
}
@凌驾
public int getRowCount(){
返回rows.size();
}
@凌驾
public int getColumnCount(){
返回列_NAMES.length;
}
@凌驾
公共字符串getColumnName(int列){
返回列名称[列];
}
@凌驾
公共对象getValueAt(int行索引、int列索引){
对象值=空;
OrderModel行=rows.get(rowIndex);
开关(列索引){
案例0:
value=row.getItem();
打破
案例1:
value=row.getQty();
打破
案例2:
value=row.getAmount();
打破
}
返回值;
}
}
然后你可以使用像
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();
}
}
private void tblOrderListMouseClicked(java.awt.event.MouseEvent evt){
int raw=tblOrderList.getSelectedRow();
订单模型或;
字符串项;
双倍数量、金额、总额;
ArrayList Arroder=新的ArrayList();
字符串selectedRaw=tblOrderList.getModel().getValueAt(原始,0.toString();
String sql=“从orderdetails中选择项目、数量、金额,其中orderid=?”;
con=新的DBconnector().connect();
try(PreparedStatement ps=con.preparest陈述(sql)){
ps.setString(1,选择的图纸);
try(ResultSet rs=ps.executeQuery()){
while(rs.next()){
或=新的OrderModel();
或.setItem(rs.getString(“item”));
或.设置数量(rs.getDouble(“数量”);
或.设定金额(rs.getDouble(“金额”));
加上(或);
}
OrderTableModel模型=新的OrderTableModel(Arroder);
tblOrderItems.setModel(model);
}
}捕获(SQLE异常){
e、 printStackTrace();
}
}
只需将项目加载到ArrayList
中,然后将其传递到OrderTableModel
的实例,然后应用到JTable
了解有关使用自定义模型的更多详细信息
查看有关如何使用PreparedStatement
s的更多详细信息
查看有关如何更好地管理数据库(和其他)资源的更多详细信息使您的
OrderModel
扩展AbstractTableModel
,并在setModel
方法中使用或作为参数,因为每个OrderModel
都是一行,您需要一个TableModel
实现,它可以管理these@MadProgrammer这是正确的。您必须创建一个表模型类,然后将行添加到该表模型中,并将jtable的模型设置为此表模型I没有任何抽象类。我们不能用这个代码吗?什么是DbUtils
?它是自定义类吗?如果是,那么发布方法的代码resultsetottablemodel()
你知道关于rxj2xml.jar的任何事情吗?不,从我所看到的一切来看,这比它的价值更麻烦。基本上,它接受一个ResultSet
并生成一个TableModel
,您无法进一步控制它it@MadProgrammer我想答案不太好,然后有两个问题(我不希望答案是y)1.为什么要回答一个从未发布过SSCCE的OP问题2。a) int raw应该进行测试,如果grather大于-1,2 b。)鼠标点击(3-5个鼠标按钮的所有事件:-)非常脆弱(EDT v.s.从/到SQL解释器的性能),我会使用鼠标右键弹出的可运行线程(从SwingWorker处享受)进行JDBC@mKorbel不我当然不会在生产环境中将JDBC调用放在EDT中,这是真的。不可能为基于JDBC的问题提供一个可运行的示例,代码对他们试图做的事情给出了足够好的理解MouseClicked
也不是一个很好的选择,同意,工具栏上的JButton
或者JMenuBar中的JMenuItem
或者jpopmpmenu
可能是一个更好的选择,但是我生成基本代码的时间有限:P