gpt4 book ai didi

java - 如何使用 TableModel 将 java ArrayList 对象(每个对象包含 {int,String,float,float})添加到 JTable

转载 作者:行者123 更新时间:2023-12-02 07:11:23 26 4
gpt4 key购买 nike

我有一个 OrderEntry 对象的 ArrayList。每个对象都有:

public class OrderEntry
{
private int quantity;
private String itemName;
private float rate;
private float value;
}

事情是,我有一个 JButton,当我单击此按钮时,我希望每个对象的值位于一行 4 列中。

我是 Swing 和 JTable/TableModel 的新手,有人可以帮我举个例子吗?

最佳答案

创建一个表模型来保存订单 - 执行 TableModel 。然后在表中设置模型。这是一个好的开始 - How to Use Tables教程。下面的示例演示了 AbstractTableModel 的非常基本的扩展。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;

public class OrderEntryTable {

public OrderEntryTable() {
JFrame frame = new JFrame("OrderEntryTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final OrderEntryModel model = new OrderEntryModel();
JTable table = new JTable();
table.setModel(model);
JScrollPane scrollPane = new JScrollPane(table);
JPanel content = new JPanel(new BorderLayout());
content.add(scrollPane, BorderLayout.CENTER);
JButton button = new JButton("Add order entry");
content.add(button, BorderLayout.SOUTH);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addOrderEntry(new OrderEntry(3, "name", 0.5f, 1.0f));
}
});
frame.add(content);
frame.pack();
frame.setVisible(true);
}

public class OrderEntryModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;
private List<OrderEntry> orders = new ArrayList<OrderEntry>();

public OrderEntryModel() {
//TODO - setup orders
}

public void addOrderEntry(OrderEntry entry) {
orders.add(entry);
int lastRow = orders.size() - 1;
fireTableRowsInserted(lastRow, lastRow);
}

@Override
public int getRowCount() {
return orders.size();
}

@Override
public int getColumnCount() {
return 4;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
OrderEntry entry = orders.get(rowIndex);
switch (columnIndex) {
case 0:
return entry.getQuantity();
case 1:
return entry.getItemName();
case 2:
return entry.getRate();
case 3:
return entry.getValue();
}
return null;
}

@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Quantity";
case 1:
return "ItemName";
case 2:
return "Rate";
case 3:
return "Value";
}
return null;
}
}

public class OrderEntry {

private int quantity;
private String itemName;
private float rate;
private float value;

public OrderEntry(int quantity, String itemName,
float rate, float value) {
super();
this.quantity = quantity;
this.itemName = itemName;
this.rate = rate;
this.value = value;
}

public int getQuantity() {
return quantity;
}

public void setQuantity(int quantity) {
this.quantity = quantity;
}

public String getItemName() {
return itemName;
}

public void setItemName(String itemName) {
this.itemName = itemName;
}

public float getRate() {
return rate;
}

public void setRate(float rate) {
this.rate = rate;
}

public float getValue() {
return value;
}

public void setValue(float value) {
this.value = value;
}
}

public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new OrderEntryTable();
}
});
}
}

关于java - 如何使用 TableModel 将 java ArrayList 对象(每个对象包含 {int,String,float,float})添加到 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15465558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com