文档库 最新最全的文档下载
当前位置:文档库 › Swing中的表格

Swing中的表格

Swing中的表格

?JTable类:

JTable类是表格中最基本的类,主要负责对数据的显示。

技术要点:

JTable的构造函数:

JTable();创建一个默认的表格。JTable(int rows,int cols);创建具有指定行数、列数的表格。JTable(Object[][] rowData,Object[][] ColumnNames);创建表格显示二维数组中的只值,列名为columnNames.

JTable(TableModeldm);创建一个指定数据模型的表格。

JTable(TableModel dm,TableColumnModel cm):创建指定数据模型、指定列模型的表格

JTable(TableModel dm,TableColumnModel cm ,ListSelectionModel sm);创建一个指定了数据模型、

列模型和指定选择模型的表格

常用方法:

●Public void selectAll():选中表中的行、列。

●Public void clearSelection():取消选中状态。

●Public void remove/setRowSelectionInterval(int index0,int index1):取消/选中指定索引值之间的行。

●Public void remove/setColumnSelectionInterval()nt index0,int index1):取消/选中指定索引值之间的列。

●Public int getSelectedColumn()/getSelectedRow():选中返回列/行的索引。

●Public int getSelectedColumnCount/getSelectedRowCount():返回选中列/行数。

●Public Boolean isColumnSelected(int col)/isRowSelected(int row):判断知道那个索引的列/行是否选中。

●Public void setRowHeight(int rowHeight)/ setRowHeight(int row,int rowHeight):设定行的高度及指定

行的高度。

●Public void setRowMargin(int rowMargin):设置相邻单元格之间的距离。

●Public void setSelectionForegraound(Color selectionfOREGROUND):设置选定单元格的前景色。

●Public void setShowGrid(Boolean showGrid)/setGridColor(Color c):是否绘制网格线/设置网格线的颜

色。

●Public void setShowHorizontalLines(Boolean bool)/setShowVeticalLines(Boolean bool):绘制单元格之

间的水平线或单元格间的垂直线。

创建表格代码如下:

public class JTableTest extends JFrame

{

Vector vdata=new Vector();//创建包含表格数据的向量

{//记住此地方的大括号的使用,没有效果也是一样

Vector tempv1=new Vector();//创建表示行数据的子向量

Vector tempv2=new Vector();

Vector tempv3=new Vector();

Vector tempv4=new Vector();

Vector[] tempv = {tempv1,tempv2,tempv3,tempv4};

String[] data1 = {"1001","怀旧牛仔裤","200.0","120.0","已发货"};

String[] data2 = {"1002","长袖针织衬衫","110.0","85.0","交易完毕"};

String[] data3 = {"1003","波西米亚长裙","300.0","180.0","待发货"};

String[] data4 = {"1004","短装牛仔服","90.0","47.0","等待处理"};

String[][] datav = {data1,data2,data3,data4};

for(int i=0;i

{

for(int j=0;j

{

tempv[i].add(datav[i][j]);

//依次将每行的字符串数组添加到表示行数据的子向量中

}//添加表示行数据的子向量到包含表格数据的向量中

vdata.add(tempv[i]);

}

}

//创建包含表格标题的向量

Vector vhead=new Vector();

{

//创建表格标题的字符串数组

String[] dataHead = {"商品ID","商品名称","商品原价","成交金额","处理情况"};

for(int i=0;i

{

vhead.add(dataHead[i]); //将标题的字符串添加到包含表格标题的向量中

}

}

JTable table=new JTable(vdata,vhead);

JScrollPane scrollPane=new JScrollPane(table);

//必须将表格添加到滚动面板中,否则不显示列名

public JTableTest()

{//设置表格的一些属性

//设置不绘制表格的垂直线

// table.setShowVerticalLines(false);/

table.setRowHeight(3,30); /设置指定行行高

table.setGridColor(Color.gray); //设置网格线的颜色为灰色

this.add(scrollPane); //将包含表格的滚动窗格添加进窗体

//窗体设置此处省略

}

//主方法省略…………

}

表格模型:

在表格中,JTable最主要负责表格的显示,而表格数据的管理则由数据模型进行管理。逼走个模型主要有:TableModel接口、AbstractTableModel类、DefaultTableModel类。

Ⅰ.TableModel接口常用方法如下:

●Public void addTableModelListener(TableModelListener e):为表模型注册TableModel

事件监听器。

●Public int getColumnCount()/getRowCount():返回该模型中的列数/行数。

●Public String getColumnName(int columnIndex):返回指定索引烈的列名。

●Public object getValueAt(int rowIndex,int columnIndex):返回指定单元格的值。

●Public void setValueAt(int rowIndex,int columnIndex):设置具体单元格的值。

●Public Boolean isCellEditable(int rowIndex,int columnIndex):判断指定单元格是否可

以编辑。

1.Public void removeTableModelListener(TableModelListener e):从表格模型中移除事件监

听器。

2.Public Class getColumnClass(int columnIndex):返回指定列的数据类型。

Ⅱ.AbstractTableModel类:

由于TabelModel接口有多种方法,因此实现此接口必须实现大量的方法,使用不方便。

Javax.swing.table包中提供了一个AbstractTableModel类,该类实现了TabelMOdel接口中的大部分类,

只有三种方法需要用户实现。(用户实现三种方法如下)

●Public abstract int getRowCount()

●Public abstract int getColumnCount()

●Public abstract Object getValueAt(int rowIndex,int columnIndex)

另外,AbstractTableModel类也有一些常用方法:

●Public void fireTableCellUpdated(int rowIndex,int columnIndex):更新指定单元格处的

值时通知监听器。

●Public void fireTableDataChanged():表格的行单元格值更改时通知监听器。

●Public void fireTableStructureChanged():表格的结构更改时通知监听器。

●Public int findColumn(String columnName):获取指定列名的索引值。

Ⅲ.DefaultTableModel类:(常用构造方法如下)

●DefaultTableModel()/ DefaultTableModel(int rowcount,int columncount)/

DefaultTableModel(Object[][] data,Object[] columnNames)/

●DefaultTableModel(Object[] columnNames,int rowCount)

常用方法如下:

●Public void addColumn(Object columnName,Object[] columnData/Vector columnData ):

添加列到模型中,新列中的数据是columnData中的元素。

●Public void addRow(Object[] rowData/Vector rowData):添加行到模型的结尾,新行的数据是

rowData。

●Public void insertRow(int row ,Vector rowData):在指定的行的位置插入指定的数据。

●Public void removeRow(int row):删除指定索引处的行。

●Public void setColumnCount(int columncount)/setRowCount(int rowCount):设置模型的

列数/行数。

public class TableModelTest extends JFrame implements ActionListener

{//创建面板,按钮数组,表格,滚动条

JPanel panel=new JPanel();

JButton addRow =new JButton("增加行");

JButton addColumn =new JButton("增加列");

JButton deleteRow =new JButton("删除行");

JButton deleteColumn =new JButton("删除列");

JButton[] buttonArray= {addRow, addColumn, deleteRow, deleteColumn};

//创建初始列标题字符串

String[] head={"第1列"};

//创建初始表格数据字符串

String[][] data={{"第1行第1列"}};

//创建表格模型

DefaultTableModel tableModel=new DefaultTableModel(data,head);

JTable table=new JTable(tableModel);

JScrollPane scrollPane = new JScrollPane(table);

public TableModelTest()

{//给按钮注册监听器,添加到面板中,将组件添加到相应的容器中,设置窗体属性for(int i=0;i

{

panel.add(buttonArray[i]);//将按扭添加进JPanel容器中

buttonArray[i].addActionListener(this);//为按扭注册动作事件监听器

}

this.add(panel,BorderLayout.NORTH);//将按扭容器添加进窗体的顶部

this.add(scrollPane,BorderLayout.CENTER);

//设置窗体的标题、位置、大小、可见性以及关闭动作..............

}

public void actionPerformed(ActionEvent e)

{

DefaultTableModel temp=(DefaultTableModel)table.getModel();//获得表格模型,必须重新获取,不能直接使用自己定义的tableModel

int c=temp.getColumnCount();//获得表格的列数

int r=temp.getRowCount(); //获得表格的行数

if(e.getSource()==buttonArray[0])

{//按下“增加行”按钮时执行的代码

//创建新行的数据向量

Vector newR=new Vector();

for(int i=0;i

{

newR.add((r+1)+"行"+(i+1)+"列");//为数据向量添加数据

}

temp.getDataVector().add(newR);//添加新的数据向量到表格模型中

((DefaultTableModel)table.getModel()).fireTableStructureChanged();

//刷新表格后重新绘制

}

else if(e.getSource()==buttonArray[1])

{//按下“增加列”按钮执行的代码

Vector newC=new Vector();//创建新列的数据向量

for(int i=0;i

{

newC.add((i+1)+"行"+(c+1)+"列");//为数据向量添加数据

}

temp.addColumn("第"+(c+1)+"列",newC);

}

else if(e.getSource()==buttonArray[2])

{//按下“删除行”按钮执行的代码

if(r>0)//检查行数是否大于0,如果大于0,删除最后一行

{

temp.removeRow(r-1); //删除最后一行,此处temp.setRowCount (r-1)效果是一样的

}

}

else if(e.getSource()==buttonArray[3])

{//按下“删除列”按钮执行的代码

if(c-1>0)//检查当前列数是否大于1,如果大于1,删除最后一列

{

temp.setColumnCount(c-1); //设置表的列数为当前列数减1,也就是最后一列被删除

}

}

}

//主方法此处省略.............

}

相关文档
相关文档 最新文档