1 import java.awt.BorderLayout;
2 import java.awt.EventQueue;
3 import java.awt.Panel;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import javax.swing.JFrame;
8 import javax.swing.JPanel;
9 import javax.swing.JScrollPane;
10 import javax.swing.JTable;
11 import javax.swing.border.EmptyBorder;
12 import javax.swing.event.TableModelEvent;
13 import javax.swing.event.TableModelListener;
14 import javax.swing.plaf.basic.BasicTabbedPaneUI.TabbedPaneLayout;
15 import javax.swing.table.TableModel;
16
17 public class test extends JFrame {
18
19 private JPanel contentPane;
20
21 /**
22 * Launch the application.
23 */
24 public static void main(String[] args) {
25 EventQueue.invokeLater(new Runnable() {
26 public void run() {
27 try {
28 test frame = new test();
29 frame.setVisible(true);
30 } catch (Exception e) {
31 e.printStackTrace();
32 }
33 }
34 });
35 }
36
37 /**
38 * Create the frame.
39 */
40 public test() {
41 List<Person> 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 = new Model();
46 Panel parent = new Panel();
47 JTable table = new JTable();
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 implements TableModel {
62 List<Person> List;
63 Object[][] p = { { "11", "Taipei" }, { "22", "ChiaYi", }, { "33", "ChiaYi", }, { "44", "ChiaYi", } }; // 表格数据
64 String n[] = { "AA", "BB" }; // 属性名
65
66 @Override
67 public Class<?> getColumnClass(int columnIndex) {
68 return Object.class;
69 }
70
71 /*
72 * 为表格传入列数
73 *
74 * @see javax.swing.table.TableModel#getColumnCount()
75 */
76 @Override
77 public int getColumnCount() {
78
79 return n.length;
80 }
81
82 /*
83 * 为表格传入属性名
84 *
85 * @see javax.swing.table.TableModel#getColumnName(int)
86 */
87 @Override
88 public String getColumnName(int columnIndex) {
89 return n[columnIndex];
90 }
91
92 /*
93 * 为表格传入行数
94 *
95 * @see javax.swing.table.TableModel#getRowCount()
96 */
97 @Override
98 public int getRowCount() {
99 return p.length;
100 }
101
102 /*
103 * 将数组中的数据传入表格
104 *
105 * @see javax.swing.table.TableModel#getValueAt(int, int)
106 */
107 @Override
108 public Object getValueAt(int rowIndex, int columnIndex) {
109
110 return p[rowIndex][columnIndex];
111 }
112
113 /*
114 * 设置表格是否可编辑
115 *
116 * @see javax.swing.table.TableModel#isCellEditable(int, int)
117 */
118 @Override
119 public boolean isCellEditable(int rowIndex, int columnIndex) {
120 return true;
121 }
122
123 /*
124 * 每当数据模型发生更改时,就将一个侦听器添加到被通知的列表中。
125 *
126 * @see
127 * javax.swing.table.TableModel#addTableModelListener(javax.swing.event.
128 * TableModelListener)
129 */
130 @Override
131 public void addTableModelListener(TableModelListener l) {
132
133 }
134
135 /*
136 * 每当数据模型发生更改时,就从被通知的列表中移除一个侦听器。
137 *
138 * @see
139 * javax.swing.table.TableModel#removeTableModelListener(javax.swing.event.
140 * TableModelListener)
141 */
142 @Override
143 public void removeTableModelListener(TableModelListener l) {
144
145 }
146
147 /*
148 * 将表格中的值设定为
149 *
150 * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
151 */
152 @Override
153 public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
154 p[rowIndex][columnIndex] = aValue;
155
156 }
157
158 }