程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> [JAVA100例]025、表格

[JAVA100例]025、表格

編輯:關於JAVA

import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import javax.swing.DefaultCellEditor;

import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.awt.*;
import java.awt.event.*;
/**
* <p>Title: 自己定義的表格</p>
* <p>Description: 繼承AbstractTableModel類,實現自己的表格</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Filename: MyTableDemo.java</p>
* @version 1.0
*/
public class MyTableDemo extends JFrame {

public MyTableDemo() {
    super("MyTableDemo");
    //聲明自己的表格,並添加到JTable中
    MyTableModel myModel = new MyTableModel();
    JTable table = new JTable(myModel);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));

//將表格添加到可滾動的面板
    JScrollPane scrollPane = new JScrollPane(table);

//將滾動面板添加到窗體
    getContentPane().add(scrollPane, BorderLayout.CENTER);
    //添加監聽
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }
/**
* <p>Title: 定義自己的表格模式</p>
* <p>Description: 通過繼承AbstractTableModel類來定義自己的表格模式,
*  這裡使得第三個以後才可以編輯</p>
*/
  class MyTableModel extends AbstractTableModel {
    //定義表頭
    final String[] columnNames = {"姓名",
                   "性別",
                   "學歷",
                   "年齡",
                   "是否已婚"};
    //初始化表數據
    final Object[][] data = {
      {"張三", "男",
       "大本", new Integer(25), new Boolean(false)},
      {"李四", "男",
       "大本", new Integer(33), new Boolean(true)},
      {"王五", "男",
       "高中", new Integer(20), new Boolean(false)},
      {"趙倩", "女",
       "大專", new Integer(26), new Boolean(true)},
      {"周大", "男",
       "大本", new Integer(24), new Boolean(false)}
    };
/**
*<br>方法說明:繼承AbstractTableModel必須實現的方法
*<br>輸入參數:
*<br>返回類型:int 列數
*/
    public int getColumnCount() {
      return columnNames.length;
    }
/**
*<br>方法說明:繼承AbstractTableModel必須實現的方法
*<br>輸入參數:
*<br>返回類型:int 列數
*/   
    public int getRowCount() {
      return data.length;
    }
/**
*<br>方法說明:繼承AbstractTableModel必須實現的方法
*<br>輸入參數:
*<br>返回類型:String 列名
*/
    public String getColumnName(int col) {
      return columnNames[col];
    }
/**
*<br>方法說明:繼承AbstractTableModel必須實現的方法,獲取表格中的數據
*<br>輸入參數:int row 行數
*<br>輸入參數:int col 列數
*<br>返回類型:Object 數據對象
*/
    public Object getValueAt(int row, int col) {
      return data[row][col];
    }
/**
*<br>方法說明:實現這個方法使得最後一列不是顯示true和false。而是使用檢查盒
*<br>輸入參數:
*<br>返回類型:
*/
    public Class getColumnClass(int c) {
      return getValueAt(0, c).getClass();
    }
/**
*<br>方法說明:這個方法不一定需要實現。這裡是為了定義可編輯的列
*<br>輸入參數:
*<br>返回類型:boolean 是否可編輯
*/
    public boolean isCellEditable(int row, int col) {
      if (col < 2) {
        return false;
      } else {
        return true;
      }
    }
/**
*<br>方法說明:實現此方法,獲得編輯數據。
*<br>輸入參數:
*<br>返回類型:
*/
    public void setValueAt(Object value, int row, int col) {
        System.out.println("修改數據位置: " + row + "," + col
                  + " 新數據為: " + value);

data[row][col] = value;
      fireTableCellUpdated(row, col);

System.out.println("表格新數據:");
        printDebugData();

}
/**
*<br>方法說明:輸出表格中的新數據
*<br>輸入參數:
*<br>返回類型:
*/
    private void printDebugData() {
      int numRows = getRowCount();
      int numCols = getColumnCount();

for (int i=0; i < numRows; i++) {
        System.out.print("  行 " + i + ":");
        for (int j=0; j < numCols; j++) {
          System.out.print(" " + data[i][j]);
        }
        System.out.println();
      }
      System.out.println("--------------------------");
    }
  }
/**
*<br>方法說明:主方法
*<br>輸入參數:
*<br>返回類型:
*/
  public static void main(String[] args) {
   JFrame.setDefaultLookAndFeelDecorated(true);
    MyTableDemo frame = new MyTableDemo();
    frame.pack();
    frame.setVisible(true);
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved