代码如下:
package swing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class JTable_Test {
public static void main(String[] args) {
jTable();
}
public static void jTable() {
JFrame frame = new JFrame("JTable的使用例子");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(200, 200));
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY)));
// 表格中显示的数据
// , { "赵子龙", "西蜀", 1234 },
Object[][] rows = null;
rows = new Object[][] { { "王明", "中国"}, { "姚明", "中国"}, { "曹操", "北魏"} };// 多加点数据,下拉条就出来了
String columns[] = { "姓名", "国籍"};
TableModel model = new DefaultTableModel(rows, columns) {
/**
*
*/
private static final long serialVersionUID = 1L;
// 重写方法使单元格无法编辑
public boolean isCellEditable(int row, int column) {
return false;
}
};
JTable table = new JTable(model);
RowSorter<TableModel> sorter = new TableRowSorter<TableModel> (model);
table.setRowSorter(sorter);
table.setPreferredScrollableViewportSize(new Dimension(150, 150));
// 设置头列不能拖拉
table.getTableHeader().setReorderingAllowed(false);
JScrollPane spane = new JScrollPane(table);
spane.setPreferredSize(new Dimension(150, 150));
panel.add(spane, BorderLayout.CENTER);
frame.add(panel);
frame.setSize(300, 300);
frame.setVisible(true);
}
}
运行结果1:
但是这里有个问题,JTable里的数据是不确定的呢,或者说JTable要增加新数据呢,应该怎么做?下面的代码可以解决这样的问题。
代码如下:
public static void jTable_DataIsNotCertain() {
JFrame frame = new JFrame("JTable的使用例子");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(200, 200));
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY)));
String columns[] = { "Item", "检查结果"};
// 以下有区别,定义的对象不一样
DefaultTableModel model = new DefaultTableModel(null, columns) {
/**
*
*/
private static final long serialVersionUID = 1L;
// 重写方法使单元格无法编辑
public boolean isCellEditable(int row, int column) {
return false;
}
};
String[] rowData = new String[3];
JTable table = new JTable(model);
// 通过这样子,我们就可以给Table新增数据
rowData[0] = "a"; //rowData[0]是列号,从0开始,第一列的值为a
rowData[1] = "b";
model.addRow(rowData);
rowData[0] = "aa";
rowData[1] = "bb";
model.addRow(rowData);
RowSorter<TableModel> sorter = new TableRowSorter<TableModel> (model);
table.setRowSorter(sorter);
table.setPreferredScrollableViewportSize(new Dimension(150, 150));
table.getTableHeader().setReorderingAllowed(false);
JScrollPane spane = new JScrollPane(table);
spane.setPreferredSize(new Dimension(150, 150));
panel.add(spane, BorderLayout.CENTER);
// 让panel重绘
panel.revalidate();
panel.repaint();
frame.add(panel);
frame.setSize(300, 300);
frame.setVisible(true);
}