天天看點

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);

    }

}

效果頁面如下:

JTable ---- java簡單表格顯示---内容可編輯