您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第18章:图形界面】_表格
发布时间:2021-01-19 16:46:55编辑:雪饮阅读()
创建一个表格
实例化javax.swing.Jtable类可以实现表格的创建
import javax.swing.JTable ;
import javax.swing.JScrollPane ;
import javax.swing.JFrame ;
public class Hello{
public static void main(String args[]) throws Exception{
JFrame frame = new JFrame("Welcome To kasumi") ;
String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"} ;
Object [][] userInfo = {
{"kasumi",24,"女",89,97,186,true} ,
{"snowDrink",23,"男",90,93,183,false},
{"ayane",23,"女",90,93,183,false}
} ; // 定义数据
JTable table = new JTable(userInfo,titles) ; // 建立表格
JScrollPane scr = new JScrollPane(table) ;
frame.add(scr) ;
frame.setSize(370,90) ;
frame.setVisible(true) ;
}
};
继承javax.swing.table.AbstractTableModel类并覆写其相关方法也可以实现表格实例
并且在这里我们还定义了下拉框字段的使用,例如性别列可选择的情况。
import java.awt.BorderLayout ;
import javax.swing.JTable ;
import javax.swing.JScrollPane ;
import javax.swing.JFrame ;
import javax.swing.JPanel ;
import javax.swing.DefaultCellEditor ;
import javax.swing.JComboBox ;
import javax.swing.table.AbstractTableModel ;
class DefaultTable extends AbstractTableModel{
private String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"} ;
private Object [][] userInfo = {
{"kasumi",25,"女",89,97,186,true} ,
{"snowDrink",23,"男",90,93,183,false},
{"ayane",24,"女",90,93,183,false}
} ; // 定义数据
public int getColumnCount(){ // 取得列的数量
return this.titles.length ;
}
public int getRowCount(){ // 取得行的数量
return this.userInfo.length ;
}
public Object getValueAt(int rowIndex, int columnIndex){
return this.userInfo[rowIndex][columnIndex] ;
}
public String getColumnName(int columnIndex){
return this.titles[columnIndex] ;
}
public Class<?> getColumnClass(int columnIndex) { // 得到指定列的类型
return this.getValueAt(0,columnIndex).getClass() ;
}
public boolean isCellEditable(int rowIndex, int columnIndex){ // 所有内容都可以编辑
return true ;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex){
this.userInfo[rowIndex][columnIndex] = aValue ;
}
}
class TableColumnModelDemo{
private JFrame frame = new JFrame("Welcome To kasumi") ;
private JTable table = null ;
private DefaultTable defaultTable = new DefaultTable() ; // TableModel
private JComboBox sexList = new JComboBox() ;
public TableColumnModelDemo(){
this.table = new JTable(this.defaultTable) ;
//以下拉列表框的形式显示性别列
this.sexList.addItem("男") ;
this.sexList.addItem("女") ;
//性别字段位于索引2上
this.table.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(this.sexList)) ;
JScrollPane scr = new JScrollPane(this.table) ;
JPanel toolBar = new JPanel() ;
frame.add(toolBar,BorderLayout.NORTH) ; // 加入组件
frame.add(scr,BorderLayout.CENTER) ; // 加入组件
frame.setSize(370,90) ;
frame.setVisible(true) ;
}
}
public class Hello{
public static void main(String args[]) throws Exception{
new TableColumnModelDemo() ;
}
};
实现动态表格
javax.swing.table.TableColumnModel类与javax.swing.table.TableColumn类提供的相关方法可以实现表格元素的动态添加
import java.awt.BorderLayout ;
import java.awt.event.ActionListener ;
import java.awt.event.ActionEvent ;
import javax.swing.JTable ;
import javax.swing.JButton ;
import javax.swing.JScrollPane ;
import javax.swing.JFrame ;
import javax.swing.JPanel ;
import javax.swing.table.DefaultTableModel ;
import javax.swing.table.TableColumnModel ;
import javax.swing.table.TableColumn ;
import java.util.Calendar;
class ChangeTable implements ActionListener{ // 通过按钮实现动态表格
private JFrame frame = new JFrame("Welcome To kasumi") ;
private JTable table = null ;
private DefaultTableModel tableModel ; // TableModel
private String[] titles = {"姓名","年龄","性别","数学成绩","英语成绩","总分","是否及格"} ;
private Object [][] userInfo = {
{"kasumi",27,"女",89,97,186,true} ,
{"snowDrink",23,"男",90,93,183,false},
{"ayane",23,"女",90,93,183,false}
} ; // 定义数据
private JButton addRowBtn = new JButton("增加行") ; // 定义按钮
private JButton removeRowBtn = new JButton("删除行") ; // 定义按钮
private JButton addColBtn = new JButton("增加列") ; // 定义按钮
private JButton removeColBtn = new JButton("删除列") ; // 定义按钮
public ChangeTable(){
this.tableModel = new DefaultTableModel(this.userInfo,this.titles) ;
this.table = new JTable(this.tableModel) ;
JScrollPane scr = new JScrollPane(this.table) ;
JPanel toolBar = new JPanel() ;
toolBar.add(this.addRowBtn) ;
toolBar.add(this.removeRowBtn) ;
toolBar.add(this.addColBtn) ;
toolBar.add(this.removeColBtn) ;
frame.add(toolBar,BorderLayout.NORTH) ; // 加入组件
frame.add(scr,BorderLayout.CENTER) ; // 加入组件
frame.setSize(370,160) ;
frame.setVisible(true) ;
this.addRowBtn.addActionListener(this) ;
this.removeRowBtn.addActionListener(this) ;
this.addColBtn.addActionListener(this) ;
this.removeColBtn.addActionListener(this) ;
}
public void actionPerformed(ActionEvent e){
// 增加列
if(e.getSource() == this.addColBtn){
Calendar calendar=Calendar.getInstance();
int Y=calendar.get(Calendar.YEAR);
int m=calendar.get(Calendar.MONTH);
int d=calendar.get(Calendar.DAY_OF_MONTH);
int h=calendar.get(Calendar.HOUR_OF_DAY);
int i=calendar.get(Calendar.MINUTE);
int s=calendar.get(Calendar.SECOND);
int ms=calendar.get(Calendar.MILLISECOND);
this.tableModel.addColumn("新增列"+Y+m+d+h+i+s+ms);
}
//增加行
//这里增加一个空行为例
if(e.getSource() == this.addRowBtn){
this.tableModel.addRow(new Object[]{}) ;
}
//删除列
if(e.getSource()==this.removeColBtn){
int colCount = this.tableModel.getColumnCount() - 1 ;// 取得列的数量
if(colCount>=0){
// 如果要想删除,则必须找到TableColumnModel
TableColumnModel columMode = this.table.getColumnModel() ;
//这里每次删除最后一列(即当前总列数减1)
TableColumn taleColumn = columMode.getColumn(colCount) ;
columMode.removeColumn(taleColumn) ;
//删除列后要重新指定总列数,否则下次操作时候会抛出数组越界异常
this.tableModel.setColumnCount(colCount) ;
}
}
//删除行
if(e.getSource()==this.removeRowBtn){
int rowCount = this.tableModel.getRowCount() - 1 ;
if(rowCount>=0){
//这里删除最后一行,即当前总行数减1
this.tableModel.removeRow(rowCount) ;
//删除行后要重新指定总行数,否则下次操作时候会抛出数组越界异常
this.tableModel.setRowCount(rowCount) ;
}
}
}
}
public class Hello{
public static void main(String args[]) throws Exception{
new ChangeTable() ;
}
};
关键字词:java,表格