JTable ---- java简单表格显示---内容可编辑

package biaoge;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.ScrollPane;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.JTableHeader;

public class JTabelFrame extends JFrame {
    
    public JTabelFrame(){ // 实现构造方法
        super("RecorderOfWorkers"); // 首先调用父类JFrame的构造方法生成一个窗口
        MyTableModel myModel = new MyTableModel();// myModel存放表格的数据
        JTable table = new JTable(myModel);// 表格对象table的数据来源是myModel对象
        table.setPreferredScrollableViewportSize(new Dimension(500, 100));// 表格的显示尺寸     

           JScrollPane scrollpanel = new JScrollPane(table);     // 产生一个带滚动条的面板
           // 将带滚动条的面板添加入窗口中
        getContentPane().add(scrollpanel, BorderLayout.CENTER);     
        addWindowListener(new WindowAdapter() {// 注册窗口监听器
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
      class MyTableModel extends AbstractTableModel{
          String[] TableHead = {"姓名","居住地","语文","数学","总分","及格","作弊"};    //表格标题
          Object[][] TableDate = {
                {"一心","广州",new Integer(60),new Integer(80),new Integer(140),new Boolean(false),new Boolean(false)},
                {"不安","河南",new Integer(70),new Integer(80),new Integer(150),new Boolean(false),new Boolean(false)},
                };//表格数据
        String update = "修改字段位置为:";
        //获得列的数目
        public int getColumnCount() {
            return TableHead.length;    
        }
        //获得行的数目
        public int getRowCount() {
            return TableDate.length;
        }
        //获得标题列的数据,并将数据存放在字符串tablehead数组里
        public String getColumnName(int column) {
            return TableHead[column];    
        }
        //获取某行某列数据,并将数据存放在object类tabledate数组里
        @Override
        public Object getValueAt(int row, int column) {            
            return TableDate[row][column];
        }
        //判断单元格类型
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }
        //将表格声明为可编辑状态
        public boolean isCellEditable(int row, int column) {
             
            if (column < 0) {
                return false;
            } else {
                return true;
            }
        }
        //改变某个数据
        public void setValueAt(Object value,int row ,int column) {
            boolean debug = true;
            if (debug) {
                System.out.println("Setting value at " + row + "," + column
                        + " to " + value + " (an instance of "
                        + value.getClass() + ")");
            }
            if (TableDate[0][column] instanceof Integer && !(value instanceof Integer)) {
                try {
                    TableDate[row][column] = new Integer(value.toString());
                    fireTableCellUpdated(row, column);
                } catch (NumberFormatException e) {
                    JOptionPane.showMessageDialog(JTabelFrame.this, "The \""
                            + getColumnName(column)
                            + "\" column accepts only integer values.");
                }
            } else{
                TableDate[row][column] = value;
                fireTableCellUpdated(row, column);
                }
            
            if (debug) {
                System.out.println("New value of data:");
                printDebugData();
            }
            
        }

        private void printDebugData() {
                int numRows = getRowCount();
                int numCols = getColumnCount();
     
                for (int i = 0; i < numRows; i++) {
                    System.out.print(" row " + i + ":");
                    for (int j = 0; j < numCols; j++) {
                        System.out.print(" " + TableDate[i][j]);
                    }
                    System.out.println();
                }
                System.out.println("--------------------------");
         }
        
      }
    public static void main(String[] args) {
        JTabelFrame frame = new JTabelFrame();
        frame.pack();
        frame.setVisible(true);
    }

}

效果页面如下:

猜你喜欢

转载自blog.csdn.net/qq_42700595/article/details/81240852