1 importjava.awt.BorderLayout;2 importjava.awt.EventQueue;3 importjava.awt.Panel;4 importjava.util.ArrayList;5 importjava.util.List;6
7 importjavax.swing.JFrame;8 importjavax.swing.JPanel;9 importjavax.swing.JScrollPane;10 importjavax.swing.JTable;11 importjavax.swing.border.EmptyBorder;12 importjavax.swing.event.TableModelEvent;13 importjavax.swing.event.TableModelListener;14 importjavax.swing.plaf.basic.BasicTabbedPaneUI.TabbedPaneLayout;15 importjavax.swing.table.TableModel;16
17 public class test extendsJFrame {18
19 privateJPanel contentPane;20
21 /**
22 * Launch the application.23 */
24 public static voidmain(String[] args) {25 EventQueue.invokeLater(newRunnable() {26 public voidrun() {27 try{28 test frame = newtest();29 frame.setVisible(true);30 } catch(Exception e) {31 e.printStackTrace();32 }33 }34 });35 }36
37 /**
38 * Create the frame.39 */
40 publictest() {41 List list = new ArrayList<>();42 list.add(new Person("1", "11", "111"));43 list.add(new Person("2", "22", "222"));44 list.add(new Person("3", "33", "333"));45 Model model = newModel();46 Panel parent = newPanel();47 JTable table = newJTable();48 table.setModel(model);//为table 分配model
49 JScrollPane jPane = new JScrollPane(table);//将table放进滚动条 放进滚动条后可显示列名50 //getContentPane()得到JFrame最底层的JPanel 默认拥有一个不可直接向JFrame添加 需向JPanel添加
51 getContentPane().add(jPane);52 table.setVisible(true);53
54 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);55 setBounds(100, 100, 450, 300);56
57 }58
59 }60
61 class Model implementsTableModel {62 ListList;63 Object[][] p = { { "11", "Taipei" }, { "22", "ChiaYi", }, { "33", "ChiaYi", }, { "44", "ChiaYi", } }; //表格数据
64 String n[] = { "AA", "BB" }; //属性名
65
66 @Override67 public Class> getColumnClass(intcolumnIndex) {68 return Object.class;69 }70
71 /*
72 * 为表格传入列数73 *74 * @see javax.swing.table.TableModel#getColumnCount()75 */
76 @Override77 public intgetColumnCount() {78
79 returnn.length;80 }81
82 /*
83 * 为表格传入属性名84 *85 * @see javax.swing.table.TableModel#getColumnName(int)86 */
87 @Override88 public String getColumnName(intcolumnIndex) {89 returnn[columnIndex];90 }91
92 /*
93 * 为表格传入行数94 *95 * @see javax.swing.table.TableModel#getRowCount()96 */
97 @Override98 public intgetRowCount() {99 returnp.length;100 }101
102 /*
103 * 将数组中的数据传入表格104 *105 * @see javax.swing.table.TableModel#getValueAt(int, int)106 */
107 @Override108 public Object getValueAt(int rowIndex, intcolumnIndex) {109
110 returnp[rowIndex][columnIndex];111 }112
113 /*
114 * 设置表格是否可编辑115 *116 * @see javax.swing.table.TableModel#isCellEditable(int, int)117 */
118 @Override119 public boolean isCellEditable(int rowIndex, intcolumnIndex) {120 return true;121 }122
123 /*
124 * 每当数据模型发生更改时,就将一个侦听器添加到被通知的列表中。125 *126 * @see127 * javax.swing.table.TableModel#addTableModelListener(javax.swing.event.128 * TableModelListener)129 */
130 @Override131 public voidaddTableModelListener(TableModelListener l) {132
133 }134
135 /*
136 * 每当数据模型发生更改时,就从被通知的列表中移除一个侦听器。137 *138 * @see139 * javax.swing.table.TableModel#removeTableModelListener(javax.swing.event.140 * TableModelListener)141 */
142 @Override143 public voidremoveTableModelListener(TableModelListener l) {144
145 }146
147 /*
148 * 将表格中的值设定为149 *150 * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)151 */
152 @Override153 public void setValueAt(Object aValue, int rowIndex, intcolumnIndex) {154 p[rowIndex][columnIndex] =aValue;155
156 }157
158 }