package com.calculator.model; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.table.DefaultTableModel; import com.calculator.biz.OperateAction; /** * JTable 操作 * * * @author Administrator * */ public class ResultView extends JFrame { public static void main(String args[]) { ResultView app = null; try { app = new ResultView(0); } catch (SQLException e1) { e1.printStackTrace(); } app.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } //记录表中数据的Id,可以根据Id操作数据 int id = 0 ; OperateAction op = new OperateAction(); // GUI变量定义 private JTable table; private JPanel panel; private JButton button; private JLabel label; //表格模型对象 private DefaultTableModel tableModel; public ResultView(int flag) throws SQLException { UIManager.put("TableHeader.font",new Font("Monospaced",Font.PLAIN,15)); //改变列名字体大小 setLocation(150,150); panel = new JPanel(); label = new JLabel("显示计算器存储结果"); label.setFont(new Font("",20,20)); label.setForeground(Color.RED); panel.add(label); add(panel,BorderLayout.NORTH); panel = new JPanel(); //删除操作 button = new JButton("删除"); button.addActionListener(new ActionListener(){ //添加事件 public void actionPerformed(ActionEvent e) { int selectedRow = table.getSelectedRow(); if(selectedRow != -1){ //删除表中的记录数 int i = op.delete(id); if(i>0){ //同时更新View的数据 tableModel.removeRow(selectedRow); //删除行 }else{ JOptionPane.showMessageDialog(null,"删除失败,请稍后再试!"); return ; } }else { JOptionPane.showMessageDialog(null,"请选择您要删除的数据!","没有选中行",2); return ; } } }); panel.add(button); //关闭操作 button = new JButton("关闭"); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { setVisible(false); } }); panel.add(button); add(panel,BorderLayout.SOUTH); //获取数据库数据,显示View数据 displayResultSet(op.getOpResult(flag)); op.getColse(); setSize(800, 250); setTitle("Dawing success option data ^_^ "); setVisible(true); } // 获取每一行的列数 private Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException { Vector currentRow = new Vector(); for (int i = 1; i <= rsmd.getColumnCount(); ++i) currentRow.addElement(rs.getString(i)); // 返回一条记录 return currentRow; } /*** * 在表格中显示查询结果 * @param rs * @throws SQLException */ private void displayResultSet(ResultSet rs) throws SQLException { if (!rs.next()) { JOptionPane.showMessageDialog(this, "结果集中无记录"); setTitle("无记录显示"); return; } Vector columnHeads = new Vector(); Vector rows = new Vector(); // 获取字段的名称 ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 1; i <= rsmd.getColumnCount(); ++i) columnHeads.addElement(rsmd.getColumnName(i)); // 获取记录集 do { rows.addElement(getNextRow(rs, rsmd)); } while (rs.next()); // 在表格中显示查询结果 tableModel = new DefaultTableModel(rows, columnHeads); table = new JTable(tableModel); table.setAutoCreateRowSorter(true);//这句话是重点 table.getColumnModel().getColumn(0).setHeaderValue("New Name"); //改变列名 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //单选 //该事件获取能够获取表中数据的Id table.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent e) { int rowI = table.rowAtPoint(e.getPoint()); //显示从表中读取de ID值 System.out.println("双击鼠标 "+(table.getModel()).getValueAt(rowI, 0)); Object obj = (table.getModel()).getValueAt(rowI, 0); String o = String.valueOf(obj); id = Integer.parseInt(o); }}); JScrollPane scroller = new JScrollPane(table); Container c = getContentPane(); c.add(scroller, BorderLayout.CENTER); } }