分享

java表格控件JTable常用操作详解

 lvwuka 2011-12-10

JTable是Swing编程中很常用的控件,这里总结了一些常用方法以备查阅.欢迎补充,转载请注明作者与出处.

            一.创建表格控件的各种方式:
            1) 调用无参构造函数.
            JTable table = new JTable();
            2) 以表头和表数据创建表格.
            Object[][] cellData = {{"row1-col1", "row1-col2"},{"row2-col1",
            "row2-col2"}};
            String[] columnNames = {"col1", "col2"};
               
            JTable table = new JTable(cellData, columnNames);
            3) 以表头和表数据创建表格,并且让表单元格不可改.
            String[] headers = { "表头一", "表头二", "表头三" };
            Object[][] cellData = null;

            DefaultTableModel model = new DefaultTableModel(cellData, headers) {

              public boolean isCellEditable(int row, int column) {
                return false;
              }
            };

            table = new JTable(model);
            二.对表格列的控制
            1) 设置列不可随容器组件大小变化自动调整宽度.
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            2) 限制某列的宽度.
            TableColumn firsetColumn = table.getColumnModel().getColumn(0);
            firsetColumn.setPreferredWidth(30);
            firsetColumn.setMaxWidth(30);
            firsetColumn.setMinWidth(30);
            3) 设置当前列数.
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
            int count=5;
            tableModel.setColumnCount(count);
            4) 取得表格列数
            int cols = table.getColumnCount();
            5) 添加列
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
            tableModel.addColumn("新列名");
            6) 删除列
            table.removeColumn(table.getColumnModel().getColumn(columnIndex));//
            columnIndex是要删除的列序号
            三.对表格行的控制
            1) 设置行高
            table.setRowHeight(20);
            2) 设置当前航数
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
            int n=5;
            tableModel.setRowCount(n);
            3) 取得表格行数
            int rows = table.getRowCount();

            4) 添加表格行
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
            tableModel.addRow(new Object[]{"sitinspring", "35", "Boss"});
            5) 删除表格行
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
            model.removeRow(rowIndex);// rowIndex是要删除的行序号
            四.存取表格单元格的数据
            1) 取单元格数据
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
            String cellValue=(String) tableModel.getValueAt(row, column);//
            取单元格数据,row是行号,column是列号
            2) 填充数据到表格.
            注:数据是Member类型的链表,Member类如下:
            public class Member{
                // 名称
                private String name;
               
                // 年龄
                private String age;
               
                // 职务
                private String title;
            }
            填充数据的代码:
            public void fillTable(List<Member> members){
              DefaultTableModel tableModel = (DefaultTableModel) table
              .getModel();
              tableModel.setRowCount(0);// 清除原有行
             
              // 填充数据
              for(Member member:members){
                String[] arr=new String[3];
                arr[0]=member.getName();
                arr[1]=member.getAge();
                arr[2]=member.getTitle();
               
                // 添加数据到表格
                tableModel.addRow(arr);
              }
             
              // 更新表格
              table.invalidate();
            }
            2) 取得表格中的数据
            public List<Member> getShowMembers(){
              List<Member> members=new ArrayList<Member>();
             
              DefaultTableModel tableModel = (DefaultTableModel) table
              .getModel();
             
              int rowCount=tableModel.getRowCount();
             
              for(int i=0;i<rowCount;i++){
                Member member=new Member();
               
                member.setName((String)tableModel.getValueAt(i, 0));//
            取得第i行第一列的数据
                member.setAge((String)tableModel.getValueAt(i, 1));//
取得第i行第二列的数据
                member.setTitle((String)tableModel.getValueAt(i, 2));//
            取得第i行第三列的数据
               
                members.add(member);
              }
             
              return members;
            }
            五.取得用户所选的行
            1) 取得用户所选的单行
            int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

            if(selectRows==1){
              int selectedRowIndex = table.getSelectedRow(); // 取得用户所选单行
             
              .// 进行相关处理
            }
            2) 取得用户所选的多行
            int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

            if(selectRows>1)
              int[] selRowIndexs=table.getSelectedRows();// 用户所选行的序列
             
              for(int i=0;i<selRowIndexs.length;i++){
                // 用tableModel.getValueAt(row, column)取单元格数据
                String cellValue=(String) tableModel.getValueAt(i, 1);
              }
            }
            六.添加表格的事件处理
            view.getTable().addMouseListener(new MouseListener() {
              public void mousePressed(MouseEvent e) {
                // 鼠标按下时的处理
              }

              public void mouseReleased(MouseEvent e) {
                // 鼠标松开时的处理
              }

              public void mouseEntered(MouseEvent e) {
                // 鼠标进入表格时的处理
              }

              public void mouseExited(MouseEvent e) {
                // 鼠标退出表格时的处理
              }

              public void mouseClicked(MouseEvent e) {
                // 鼠标点击时的处理
              }
            });

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多