㈠ 用java做的表格界面
package com.network;
import java.awt.BorderLayout;
import java.awt.Color;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TableWin extends JFrame{
private Vector data1;
private Vector data2;
public TableWin(Vector data1,Vector data2) {
this.data1 = data1;
this.data2 = data2;
addItems();
setWin();
}
private void setWin() {
this.setSize(400, 550);
this.setLocationRelativeTo(null);
this.getContentPane().setBackground(new Color(249,208,241));
}
private void addItems() {
JTabbedPane tp = new JTabbedPane();
JPanel p1 = house();
tp.add("房間詳情",p1);
this.add(tp);
}
private JPanel house() {
JPanel p = new JPanel(new BorderLayout());
Vector< String > titel= new Vector<String>();
titel.add("房號");
titel.add("房間類型");
titel.add("狀態");
titel.add("入住旅客");
JTable table = new JTable(data1,titel);
JScrollPane sp = new JScrollPane(table);
p.add(sp,new BorderLayout().CENTER);
return p;
}
}
package com.start;
import java.util.Vector;
import com.network.TableWin;
import com.network.Win;
public class Start {
public static void main(String[] args) {
Vector<Vector> v1 = new Vector<Vector>();
Vector<String> v = new Vector<String>();
for(int i=0;i<5;i++){
v.add("o"+i);
}
v1.add(v);
Vector<String> v2 = new Vector<String>();
Vector<String> vv = new Vector<String>();
for(int i=0;i<5;i++){
vv.add("oo"+i);
}
v1.add(vv);
new TableWin(v1,v2).setVisible(true);
}
}
㈡ JAVA圖形界面,表格的問題
沒什麼,提個建議,改使用fx2,你會發現table-ui,還有ui上的值進行動態刷新其實很簡單。
㈢ JAVA輸入問題(創建一個類似表格的填寫界面)
是在javascript中用confirm探出提示框
<script type="text/javascript">
function IsSubmit(){
if(window.confirm("確認提交?"))
from1.submit;
}
</script>
<form name=form1 action=...>
<input type=button onclick=IsSubmit()>
</form>
㈣ 用JAVA做出表格效果
在java中 swing包下有table的控制項,就想當於EXCEL的表格
㈤ JAVA如何創建一個20行30列的文本框
1、首先打開Java表格進入界面。
2、其次點擊創建表格進入設置界面。
3、最後編劇調整為20行30列點擊確定即可。
㈥ Java如何將一個界面表格裡面的內容點擊確定按鈕添加到另外一個界面表格中
實現方法
1、初始化
首先添加JScrollPane的實例jScrollPane1,DefaultListModel
實例model1,然後使用model1生成JList的實例。在對話框合適的位置添加jScrollPane1,調整到合適的大小,然後在jScrollPane1上增加jList1.這樣帶有滾動條的列表框就添加完成了。
初始化一個Vector實例用來存儲選擇的列表元素。由於選擇的元素具有不確定性,所以使用Vector這種存儲空間可以動態變化的數據結構。Vector初始化實例時不能指定初始化長度,所以增加一個整形變數指示Vector中列表中對象的個數。
2、添加和刪除列表元素
列表框中的元素添加和刪除是通過model1的addElement方法和removeElement方法實現的。通過列表框的屬性selectionMode可以設置列表框單選,單個間斷選擇和多個間斷選擇。Vector中存儲的對象是和選擇的元素相對應的,對象的添加和刪除是通過addElement方法和removeElement方法實現的。
3、獲得選擇元素
在點擊「確定」按鈕以後,需要將Vector實例中的對象轉化成為需要的數據類型。
實例解析
現以圖1所示為例對具體實現方法進行描述。由圖1中左面列表框中選擇可用元素,選擇方式設為多個間斷選擇,由於其他兩種方式相對簡單,實現方法可在這個實例的基礎上修改得到。選定元素之後,點擊「>>」按鈕,選擇的元素就會在右面的列表框顯示出來。如果多選或者錯選,可在右面的列表框中選定元素後點擊「<<」按鈕移去選定的元素。
以上實現的功能代碼如下
圖1 列表框示例
具體程序實現方法如下。
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import java.awt.Rectangle;
import java.util.Vector;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.DefaultListModel;
public class Llist extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JScrollPane jScrollPane = null;
private JScrollPane jScrollPane1 = null;
private JList jList = null;
private JList jList1 = null;
private JButton jButton = null;
private JButton jButton1 = null;
private DefaultListModel model;
private DefaultListModel model2;
/**
* This is the default constructor
*/
private Vector vc=new Vector(); // @jve:decl-index=0:
private int num;
public Llist() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(393, 263);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJScrollPane(), null);
jContentPane.add(getJScrollPane1(), null);
jContentPane.add(getJButton(), null);
jContentPane.add(getJButton1(), null);
jContentPane.add(getJButton2(), null);
jContentPane.add(getJButton3(), null);
}
return jContentPane;
}
/**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setBounds(new Rectangle(22, 23, 110, 152));
jScrollPane.setViewportView(getJList());
}
return jScrollPane;
}
/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
jScrollPane1 = new JScrollPane();
jScrollPane1.setBounds(new Rectangle(223, 24, 116, 150));
jScrollPane1.setViewportView(getJList1());
}
return jScrollPane1;
}
/**
* This method initializes jList
*
* @return javax.swing.JList
*/
String[]
a={"Element1","Element2","Element3","Element4","Element5","Element6","Element7","Element8","Element9","Element10",};
private JButton jButton2 = null;
private JButton jButton3 = null;
private JList getJList() {
if (jList == null) {
jList = new JList();
model=new DefaultListModel();
jList.setModel(model);
for(int i=0;i<a.length;i++)
{
model.addElement(a[i]);
}
}
return jList;
}
/**
* This method initializes jList1
*
* @return javax.swing.JList
*/
private JList getJList1() {
if (jList1 == null) {
jList1 = new JList();
model2=new DefaultListModel();
jList1.setModel(model2);
}
return jList1;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(149, 52, 56, 29));
jButton.setText(">>");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//System.out.println("actionPerformed()"); // TODO Auto-generated Event
stub actionPerformed()
Object[] items=jList.getSelectedValues();
for(int i=0;i<items.length;i++)//從左邊選中元素,往右邊的列表中添加元素
{
model2.addElement(items[i]);
num=num+1;
vc.setSize(num);
}
}
});
}
return jButton;
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(145, 117, 65, 31));
jButton1.setText("<<");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//System.out.println("actionPerformed()"); // TODO Auto-generated Event
stub actionPerformed()
for(int i=0;i<jList1.getSelectedValues().length;i++)
{
model2.removeElement(jList1.getSelectedValue());//刪除選中右邊的列表元素
num=num-1;
vc.setSize(num);
}
}
});
}
return jButton1;
}
/**
* This method initializes jButton2
*
* @return javax.swing.JButton
*/
private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setBounds(new Rectangle(82, 193, 63, 27));
jButton2.setText("確定");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
}
});
}
return jButton2;
}
/**
* This method initializes jButton3
*
* @return javax.swing.JButton
*/
private JButton getJButton3() {
if (jButton3 == null) {
jButton3 = new JButton();
jButton3.setBounds(new Rectangle(196, 195, 66, 23));
jButton3.setText("取消");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//System.out.println("actionPerformed()"); // TODO Auto-generated Event
stub actionPerformed()
model2.removeAllElements();//刪除右邊列表框的所有元素
}
});
}
return jButton3;
}
}
㈦ Java圖形界面中怎麼實現表格里的數據在表格中進行排序
Swing是MVC架構,所以你修改模型層,顯示層就隨之而變。也就是說你先對數據進行排序,然後再放到表格組件中。
㈧ 如何用java應用程序創建表格
多少有點麻煩
建意不要用java來實現
JTable 組件:
類層次結構圖:
java.lang.Object
--java.awt.Component
--java.awt.Container
--javax.swing.JComponent
--javax.swing.JTabel
在使用 JTable 以前,我們先看一下它的構造函數有哪些, 以及應該如何使用:
JTabel 構造函數:
JTable():建立一個新的 JTables,並使用系統默認的 Model.
JTable(int numRows,int numColumns):建立一個具有 numRows 行,numColumns 列的空表格,
使用的是 DefaultTableModel.
JTable(Object[ ][ ] rowData,Object[ ][ ] columnNames):建立一個顯示二維數組數據的表格,且可
以顯示列的名稱。
JTable(TableModeldm):建立一個 JTable,有默認的欄位模式以及選擇模式,並設置數據模式。
JTable(TableModeldm,TableColumnModel cm):建立一個 JTable,設置數據模式與欄位模式,並
有默認的選擇模式。
JTable(TableModel dm,TableColumnModel cm,ListSelectionModel sm):建立一個 JTable,設置數
據模式、欄位模式、與選擇模式。
JTable(Vector rowData,Vector columnNames):建立一個以 Vector 為輸入來源的數據表格,可顯
示行的名稱。
我們先以 Array 構造方式,說明如何利用 JTable 來建立一個簡單的表格:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SimpleTable{
public SimpleTable(){
JFrame f=new JFrame();
Object[ ][ ] playerInfo={
{" 阿 呆 ",new Integer(66),new Integer(32),new Integer(98),new
Boolean(false)},
{"阿獃",new Integer(82),new Integer(69),new Integer(128),new
Boolean(true)},
};
String[ ] Names={"姓名","語文","數學","總分","及格"};
JTable table=new JTable(playerInfo,Names);
table.(new Dimension(550,30));
JScrollPane scrollPane=new JScrollPane(table);
f.getContentPane().add(scrollPane,BorderLayout.CENTER);
f.setTitle("SimpleTable");
f.pack();
f.show();
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args){
SimpleTable b=new SimpleTable();
}
}
表格由兩部份組成:分別是行標題(Column Header)與行對象(Column Object).利用 JTable
所提供的 getTableHeader()方法取得行標題。在這個例子中,我們將 JTable 放在 JScrollPane
中,這種做法可以將 Column Header 與 Colmn Object 完整的顯示出來,因為 JScrollPane 會自
動 取 得 Column Header. 但 如 果 文 壇 讀 者 將 上 面 第 15 行 去 掉 並 修 改 第 16 行 :
f.getContentPane().add(table,BorderLayout.CENTER);
則運行結果你會發現 Column Header 不見了。
如果你不想用 JScrollPane,要解決這個問題,你必須將程序修改如下:
JTable table=new JTable(p,n);
table.(new Dimension(550,30));
f.getContentPane().add(table.getTableHeader(),BorderLayout.NORTH);
f.getContentPane().add(table,BorderLayout.CENTER);
運行結果就會跟之前一樣有行標題了.
上面的運行結果就會跟發現,每個欄位的寬度都是一樣的,除非你自行拉曳某個列寬。若
我們想一開始就設置列寬的值,可以利
用 TableColumn 類所提供的 setPreferredWidth()方法來設置,並可利用 JTable 類所提供的
setAutoResizeMode()方法來設置調整某個
列寬時其他列寬的變化情況,我們看下面這個例子:
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SimpleTable2{
public SimpleTable2(){
JFrame f=new JFrame();
Object[][] p={
{" 阿 呆 ",new Integer(66),new Integer(32),new Integer(98),new
Boolean(false),new Boolean(false)},
{" 阿 呆 ",new Integer(82),new Integer(69),new Integer(128),new
Boolean(true),new Boolean(false)},
};
String[] n={"姓名","語文","數學","總分","及格","作弊"};
TableColumn column=null;
JTable table=new JTable(p,n);
table.(new Dimension(550,30));
table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
for (int i=0;i<6;i++){
//利用 JTable 中的 getColumnModel()方法取得 TableColumnModel 對象;再利用
TableColumnModel 界面所定義的 getColumn()方法取
//TableColumn 對象,利用此對象的 setPreferredWidth()方法就可以控制欄位的寬度.
column=table.getColumnModel().getColumn(i);
if ((i%2)==0)
column.setPreferredWidth(150);
else
column.setPreferredWidth(50);
}
JScrollPane scrollPane=new JScrollPane(table);
f.getContentPane().add(scrollPane,BorderLayout.CENTER);
f.setTitle("SimpleTable");
f.pack();
f.show();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args){
new SimpleTable2();
}
}
列可調整的 5 個參數:
AUTO_RESIZE_SUBSEQUENT_COLUMENS:當調整某一列寬時,此欄位之後的所有欄位列
寬都會跟著一起變動。此為系統默認值。
AUTO_RESIZE_ALL_COLUMNS:當調整某一列寬時,此表格上所有欄位的列寬都會跟著一
起變動。
AUTO_RESIZE_OFF:當調整某一列寬時,此表格上所有欄位列寬都不會跟著改變。
AUTO_RESIZE_NEXT_COLUMN:當調整某一列寬時,此欄位的下一個欄位的列寬會跟著改
變,其餘均不會變。
AUTO_RESIZE_LAST_COLUMN:當調整某一列寬時,最後一個欄位的列寬會跟著改變,其
余均不會改變。
由以上範例可知,利用 Swing 來構造一個表格其實很簡單的,只要你利用 Vector 或 Array
來作為我們表格的數據輸入,將 Vector 或 Array 的
內容填入 JTable 中,一個基本的表格就產生了。不過,雖然利用 JTable(Object[][]
rowData,Object[][] columnNames)以及
JTable(Vector rowData,Vector columnNames)構造函數來構造構造 JTable 很方便,但卻有些缺
點。例如上例中,我們表格中的每個欄位
(cell)一開始都是默認為可修改的,用戶因此可能修改到我們的數據;其次,表格中每個單元
(cell)中的數據類型將會被視為同一種。在我
們的例子中,數據類型皆被顯示為 String 的類型,因此,原來的數據類型聲明為 Boolean 的
數據會以 String 的形式出現而不是以檢查框(
Check Box)出現。
除此之外,如果我們所要顯示的數據是不固定的,或是隨情況而變,例如同樣是一份成績
單,老師與學生所看到的表格就不會一樣,顯
示的外觀或操作模式也許也不相同。為了因應這些種種復雜情況,上面簡單的構造方式已不
宜使用,Swing 提供各種 Model(如:
TableModel、TableColumnModel 與 ListSelectionModel)來解決上述的不便,以增加我們設計
表格的彈性。我們下面就先對 TableModel 來
做介紹:
TableModel
TableModel類本身是一個interface,在這個interface裡面定義了若乾的方法:包括了存取表
格欄位(cell)的內容、計算表格的列數等等的基本存取操作,讓設計者可以簡單地利用
TableModel 來實作他所想要的表格。TableModel 界面是放在 javax.swing.table package 中,
這個 package 定義了許多 JTable 會用到的各種 Model,讀者可利用 java api 文件找到這個
package,並由此 package 找到各類或界面所定義的方法。
TableModel 方法:
void addTableModelListener(TableModelListener l):使表格具有處理 TableModelEvent 的能
力。當表格的 Table Model 有所變化時,會發出 TableModel Event 事件信息.
Class getColumnClass(int columnIndex):返回欄位數據類型的類名稱.
int getColumnCount():返回欄位(行)數量.
String getColumnName(int columnIndex):返回欄位名稱.
int getRowCount():返回數據列數量.
Object getValueAt(int rowIndex,int columnIndex):返回數據某個 cell 中的值.
boolean isCellEditable(int rowIndex,int columnIndex):返回cell是否可編輯,true的話
為可編輯.
void removeTableModelListener(TableModelListener l):從 TableModelListener 中
移除一個 listener.
void setValueAt(Object aValue,int rowIndex,int columnIndex): 設 置 某 個
cell(rowIndex,columnIndex)的值;
由於TableModel本身是一個Interface,因此若要直接實現此界面來建立表格並不是件輕松
的事.幸好 java 提供了兩個類分別實現了這個界面,一個是 AbstractTableModel 抽象類,一個是
DefaultTableModel 實體類.前者實現了大部份的 TableModel 方法,讓用戶可以很有彈性地構
造自己的表格模式;後者繼承前者類,是 java 默認的表格模式.這三者的關系如下所示:
TableModel---implements--->AbstractTableModel-----extends--->DefaultTableModel
AbstractTableModel:
java 提供的 AbstractTableModel 是一個抽象類,這個類幫我們實現大部份的 TableModel 方
法,除了 getRowCount(),getColumnCount(),getValueAt()這三個方法外.因此我們的主要任務就
是去實現這三個方法.利用這個抽象類就可以設計出不同格式的表格.我們來看看它所
提供的方法:
AbstractTableModel 方法:
void addTableModelListener(TableModelListener l):使表格具有處理 TableModelEvent 的能
力.當表格的 Table Model 有所變化時,會發出 TableModelEvent 事件信息.
int findColumn(String columnName):尋找在行名稱中是否含有 columnName 這個項目.若
有,則返回其所在行的位置;反之則返回-1 表示
void fireTableCellUpdated(int row, int column):通知所有的 Listener 在這個表格中的
(row,column)欄位的內容已經改變了.
void fireTableChanged(TableModelEvent e):將所收的事件通知傳送給所有在這個 table
model 中注冊過的 TableModelListeners.
void fireTableDataChanged():通知所有的 listener 在這個表格中列的內容已經改變了.列的
數目可能已經改變了,因此 JTable 可能需要重新顯示此表格的結構.
void fireTableRowsDeleted(int firstRow, int lastRow):通知所有的 listener 在這個表格中第
firstrow 行至 lastrow 列已經被刪除了.
void fireTableRowsUpdated(int firstRow, int lastRow):通知所有的 listener 在這個表格中第
firstrow 行至 lastrow 列已經被修改了.
void fireTableRowsInserted(int firstRow, int lastRow):通知所有的 listener 在這個表格中第
firstrow 行至 lastrow 列已經被加入了
.
void fireTableStructureChanged():通知所有的listener在這個表格的結構已經改變了.行的數
目,名稱以及數據類型都可能已經改變了
.
Class getColumnClass(int columnIndex):返回欄位數據類型的類名稱.
String getColumnName(int column): 若 沒 有 設 置 列 標 題 則 返 回 默 認 值 , 依 次 為
A,B,C,...Z,AA,AB,..;若無此 column,則返回一個空的 String
.
Public EventListener[] getListeners(Class listenerType):返回所有在這個 table model 所建立的
listener 中符合 listenerType 的 listener,並以數組形式返回.
boolean isCellEditable(int rowIndex, int columnIndex):返回所有在這個 table model 所建立的
listener 中符合 listenerType 形式的 listener,並以數組形式返回.
voidremoveTableModelListener(TableModelListener l):從 TableModelListener 中移除一個
listener.
voidsetValueAt(Object aValue, int rowIndex, int columnIndex)
:設置某個 cell(rowIndex,columnIndex)的值.
若你仔細比較TableModel所定義的方法與上述AbstractTableModel所提供的方法,你可以發
現,AbstractTableModel 抽象類並沒有實現
getRowCount(),getColumnCount(),getValueAt()這三個方法,這也就是為什麼我們要去實現這
三個方法的原因.下面我們來看如何使用
AbstractTableModel 來實作出自己想要的表格模式.
範例:TableModel1.java
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public classTableModel1{
publicTableModel1() {
JFrame f = new JFrame();
MyTable mt=new MyTable();
JTable t=new JTable(mt);
t.(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("JTable1");
f.pack();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[]) {
newTableModel1();
}
}
class MyTable extendsAbstractTableModel{
Object[][] p = {
{"阿獃", new Integer(66),
new Integer(32), new Integer(98), new Boolean(false),new Boolean(false)},
{"阿瓜", new Integer(85),
new Integer(69), new Integer(154), new Boolean(true),new Boolean(false)},
};
String[] n = {"姓名",
"語文",
"數學",
"總分",
"及格",
"作弊"};
public int getColumnCount() {
return n.length;
}
public int getRowCount() {
return p.length;
}
public String getColumnName(int col) {
return n[col];
}
public Object getValueAt(int row, int col) {
return p[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
上例中表格內的數據類型不論是 String,int 或是 Boolean 類型,都均以 string 的類型顯示.
例如在及格的欄位中,原本的數據是以 Boolean
類型來表示,但顯示在 JTable 上時便轉換成字元串形式,若想要使表格能顯示出不同的數據類
型,我們要在 MyTable 中 Override 寫 getColumnCl
ass()方法,這個方法可以讓我們分辨出表格中每一行的數據類型,並將此類型作適當的顯示:
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
這樣"作弊"會以 Check Box 顯示,數據類型一律靠右顯示,String 類型一律靠左顯示.
TableModel2.java
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public classTableModel2 implementsActionListener{
JTable t = null;
publicTableModel2() {
JFrame f = new JFrame("DataModel");
JButton b1 = new JButton("數學老師");
b1.addActionListener(this);
JButton b2 = new JButton("學生阿獃");
b2.addActionListener(this);
JPanel panel = new JPanel();
panel.add(b1);
panel.add(b2);
t=new JTable(new MyTable(1));
t.(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(panel, BorderLayout.NORTH);
f.getContentPane().add(s, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("學生阿獃"))
t.setModel(new MyTable(1));
if (e.getActionCommand().equals("數學老師"))
t.setModel(new MyTable(2));
t.revalidate();
}
public static void main(String args[]) {
newTableModel2();
}
}
class MyTable extendsAbstractTableModel{
Object[][] p1 = {
{"阿獃", "1234",new Integer(66),
new Integer(50), new Integer(116), new Boolean(false),new Boolean(false)}};
String[] n1 = {"姓名","學號","語文","數學","總分","及格","作弊"};
Object[][] p2 = {
{"阿獃", "1234",new Integer(50), new Boolean(false),new Boolean(false),"01234"},
{"阿瓜", "1235",new Integer(75), new Boolean(true),new Boolean(false),"05678"}};
String[] n2 = {"姓名","學號","數學","及格","作弊","電話"};
int model = 1;
public MyTable(int i){
model = i;
}
public int getColumnCount() {
if(model ==1)
return n1.length;
else
return n2.length;
}
public int getRowCount() {
if(model ==1)
return p1.length;
else
return p2.length;
}
public String getColumnName(int col) {
if(model ==1)
return n1[col];
else
return n2[col];
}
public Object getValueAt(int row, int col) {
if(model == 1)
return p1[row][col];
else
return p2[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
TableColumnModel:
TableColumnModel 本身是一個 Interface,裡面定義了許多與表格的"列(行)"有關的方法,例
如增加列,刪除列,設置與取得"列"的相關信
息.通常我們不會直接實現 TableColumnModel 界面,而是會利用 JTable 的 getColumnModel()
方法取得 TableColumnModel 對象,再利用此對象對
欄位做設置.舉例來說,如果我們想設計的表格是包括有下拉式列表的 Combo Box,我們就能
利用 TableColumnModel 來達到這樣的效果.
我們先看看下面的例子:
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ColumnModelTest{
public ColumnModelTest() {
JFrame f = new JFrame();
/* 由 於 我 們 的 MyTable 類 繼 承 了 AbstractTableModel 並 且 實 作 了
getColmunCount(),getRowCount(),getValueAt()方法.因此我們可以通
*過 MyTable 來產生 TableModel 的實體.
*/
MyTable mt=new MyTable();
JTable t=new JTable(mt);//我們利用 MyTable 來建立 JTable.
JComboBox c = new JComboBox();//建立一個 JComboBox 的對象.
c.addItem("Taipei");//我們在新建立的 JComboBox 對象里新增三個項目.
c.addItem("ChiaYi");
c.addItem("HsinChu");
/*我們利用 JTable 所提供的 getTableColumnModel()方法取得 TableColumnModel 對象,
再由 TableColumnModel 類所提供的 getColumn()方
*法取得 TableColumn 對象,TableColumn 類可針對表格中的每一行做具體的設置,例如
設置欄位的寬度,某行的標頭,設置輸入較復雜的
*數據類型等等.在這里,我們利用 TableColumn 類所提供的 setCellEditor()方法,將
JComboBox 作為第二行的默認編輯組件.
*/
t.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(c));
t.(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("ColumnModelTest");
f.pack();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[]) {
new ColumnModelTest();
}
}
class MyTable extendsAbstractTableModel{
Object[][] p = {
{"阿獃", "Taipei",new Integer(66),
new Integer(32), new Integer(98), new Boolean(false),new Boolean(false)},
{"阿瓜", "ChiaYi",new Integer(85),
new Integer(69), new Integer(154), new Boolean(true),new Boolean(false)},
};
String[] n = {"姓名",
"居住地",
"語文",
"數學",
"總分",
"及格",
"作弊"};
public int getColumnCount() {
return n.length;
}
public int getRowCount() {
return p.length;
}
public String getColumnName(int col) {
return n[col];
}
public Object getValueAt(int row, int col) {
return p[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
/*pu
㈨ java怎麼用jframe做表格
摘要 swing組件JTable