package itheima012; import javax.swing.*; import javax.swing.table.AbstractTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; public class JTableModelDemo3_2 { public static void main(String[] args) { new JTableModelDemo3_2().init(); } JFrame jf = new JFrame("TableModel"); Object[] titles = {"姓名", "年龄", "性别"}; Object[][] data = { {"李白", "30", "男"}, {"河北", "200", "女"}, {"李立言", "25", "男"}, {"辜秋琴", "20", "女"} }; private Vector titlev = new Vector(); private Vector<Vector> datav = new Vector<>(); JButton btn = new JButton("获取选择行的第一个单元格数据"); private void init() { for (int i = 0; i < titles.length; i++) { titlev.add(titles[i]); } for (int i = 0; i < data.length; i++) { Vector v = new Vector(); for (int j = 0; j < data[i].length; j++) { v.add(data[i][j]); } datav.add(v); } // JTable table = new JTable(data,titles);方法一 // JTable table = new JTable(datav,titlev);方法二 MyTableModel myTableModel = new MyTableModel();//方法三 JTable table = new JTable(myTableModel); btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int selectedColumn = table.getSelectedColumn(); int selectedRow = table.getSelectedRow(); System.out.println("当前选择"+selectedRow+"行索引,"+selectedColumn+"列索引"); System.out.println("所选单元格数据为"+myTableModel.getValueAt(selectedRow,selectedColumn)); } }); jf.add(new JScrollPane(table)); jf.add(btn, BorderLayout.SOUTH); jf.pack(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } private class MyTableModel extends AbstractTableModel { @Override public int getRowCount() { // return data.length; return datav.size(); } @Override public int getColumnCount() { // return titles.length; return titlev.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { return datav.get(rowIndex).get(columnIndex); } @Override public String getColumnName(int column) { return (String) titlev.get(column); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } } }