我创建了一个初始 JFrame,其中包含一个包含三列的表,如下所示:
这个 JFrame 是在设计模式下创建的,所以现在在面板的构造函数中,我想加载一些数据,所以当用户选择打开这个 JFrame 时,数据就会被加载。
我的列数据类型是对象(通常“状态”用于表示共享状态的图像 - 活动或非活动),共享名称的字符串和连接到该共享的活动客户端数量的整数。
我的问题是,如何通过代码向 JTable 添加行?
我创建了一个初始 JFrame,其中包含一个包含三列的表,如下所示:
这个 JFrame 是在设计模式下创建的,所以现在在面板的构造函数中,我想加载一些数据,所以当用户选择打开这个 JFrame 时,数据就会被加载。
我的列数据类型是对象(通常“状态”用于表示共享状态的图像 - 活动或非活动),共享名称的字符串和连接到该共享的活动客户端数量的整数。
我的问题是,如何通过代码向 JTable 添加行?
以简化的方式(可以改进):
class MyModel extends AbstractTableModel{
private ArrayList<Register> list = new ArrayList<Register>();
@Override
public int getColumnCount() {
return 3;
}
@Override
public int getRowCount() {
return list.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Register r = list.get(rowIndex);
switch (columnIndex) {
case 0: return r.status;
case 1: return r.name;
case 2: return r.clients;
}
return null;
}
public void addRegister(String status, String name, String clients){
list.add(new Register(status, name, clients));
this.fireTableDataChanged();
}
class Register{
String status;
String name;
String clients;
public Register(String status, String name, String clients) {
this.status = status;
this.name = name;
this.clients = clients;
}
}
}
然后,在面板的构造函数中:
MyTableModel mtm = new MyTableModel();
yourtable.setModel(mtm);
并添加一行:
mtm.addRegister("the status","the name","the client(s)");
编辑:
要更改列的标题名称:
TableColumn statusColumn = yourtable.getColumnModel().getColumn(0);
statusColumn.setHeaderValue("Status");
JTable有两个级别(如您发布的 printscreen)谈论视图,
有(隐藏的)XxxTableModel存储值,
在XxxTableModel
你可以调用myTableModel#addRow
简单的例子
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.*;
public class RemoveAddRows extends JFrame {
private static final long serialVersionUID = 1L;
private Object[] columnNames = {"Type", "Company", "Shares", "Price"};
private Object[][] data = {
{"Buy", "IBM", new Integer(1000), new Double(80.50)},
{"Sell", "MicroSoft", new Integer(2000), new Double(6.25)},
{"Sell", "Apple", new Integer(3000), new Double(7.35)},
{"Buy", "Nortel", new Integer(4000), new Double(20.00)}
};
private JTable table;
private DefaultTableModel model;
public RemoveAddRows() {
model = new DefaultTableModel(data, columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
table = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
int firstRow = 0;
int lastRow = table.getRowCount() - 1;
int width = 0;
if (row == lastRow) {
((JComponent) c).setBackground(Color.red);
} else if (row == firstRow) {
((JComponent) c).setBackground(Color.blue);
} else {
((JComponent) c).setBackground(table.getBackground());
}
/*if (!isRowSelected(row)) {
String type = (String) getModel().getValueAt(row, 0);
c.setBackground("Buy".equals(type) ? Color.GREEN : Color.YELLOW);
}
if (isRowSelected(row) && isColumnSelected(column)) {
((JComponent) c).setBorder(new LineBorder(Color.red));
}*/
return c;
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
JButton button1 = new JButton("Remove all rows");
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (model.getRowCount() > 0) {
for (int i = model.getRowCount() - 1; i > -1; i--) {
model.removeRow(i);
}
}
System.out.println("model.getRowCount() --->" + model.getRowCount());
}
});
JButton button2 = new JButton("Add new rows");
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Object[] data0 = {"Buy", "IBM", new Integer(1000), new Double(80.50)};
model.addRow(data0);
Object[] data1 = {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)};
model.addRow(data1);
Object[] data2 = {"Sell", "Apple", new Integer(3000), new Double(7.35)};
model.addRow(data2);
Object[] data3 = {"Buy", "Nortel", new Integer(4000), new Double(20.00)};
model.addRow(data3);
System.out.println("model.getRowCount() --->" + model.getRowCount());
}
});
JPanel southPanel = new JPanel();
southPanel.add(button1);
southPanel.add(button2);
add(southPanel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
RemoveAddRows frame = new RemoveAddRows();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}