当前位置: 源码素材网 » Java教程 » 详情页

Java Swing JTable使用例子

  •   时间:2019-10-04
  • 概述:JTable

Java Swing JTable使用例子,涉及到组合框、事件监听器、table滚动条等相关技巧:

import javax.swing.table.AbstractTableModel;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JTableDemo implements TableModelListener
{
    JTable table = null;
    MyTable mt = null;
    JLabel label = null; //显示修改字段位置
    public JTableDemo() {
       	JFrame f = new JFrame();
       	mt=new MyTable();
       	// 增加JTable事件监听器
    	mt.addTableModelListener(this);
       	table=new JTable(mt);
       	// 创建组合框
       	JComboBox c = new JComboBox();
       	// 给组合框增加条目
       	c.addItem("广州");
       	c.addItem("上海");
       	c.addItem("北京");
       	// 利用组合框作为table的第一列值的选项
       	table.getColumnModel().
		   getColumn(1).setCellEditor(new DefaultCellEditor(c));
       	// 设定table的显示的大小
       	table.setPreferredScrollableViewportSize(new Dimension(550, 40));
       	// 给table增加滚动条
        JScrollPane s = new JScrollPane(table);
        label = new JLabel("修改字段位置:");
        f.getContentPane().add(s, BorderLayout.CENTER);
        f.getContentPane().add(label, BorderLayout.SOUTH);
	    f.setTitle("TableEventHandle");
        f.pack();
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    public void tableChanged(TableModelEvent e)
    {
    	int row = e.getFirstRow();  // 得到被修改的行(第一个)的行数
        int column = e.getColumn(); // 得到被修改的列数
        label.setText("修改字段位置:"+(row+1)+" 行 "+(column+1)+" 列");
        //  得到第row行第6列的值,即看看是否作弊
        boolean cheat =((Boolean)(mt.getValueAt(row,6))).booleanValue();
        int grade1=((Integer)(mt.getValueAt(row,2))).intValue();
        int grade2=((Integer)(mt.getValueAt(row,3))).intValue();
	    int total = grade1+grade2;
    	if(cheat)
    	{   //  如果作弊,则总分重设
    		if(total > 120)
    			mt.mySetValueAt(new Integer(119),row,4);
    		else
    			mt.mySetValueAt(new Integer(total),row,4);
    		mt.mySetValueAt(new Boolean(false),row,5);
    	}
    	else
    	{
    		if(total > 120)	 // 判断该学生是否及格
    			mt.mySetValueAt(new Boolean(true),row,5);
    		else
    			mt.mySetValueAt(new Boolean(false),row,5);
    		mt.mySetValueAt(new Integer(total),row,4);
    	}
    	table.repaint();
    }
    public static void main(String args[]) {
        new JTableDemo();
    }
}
class MyTable extends AbstractTableModel {
    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)},
	{"小东", "北京",new Integer(88), new Integer(70), new Integer(158),
      new Boolean(false),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];
    }
    // 返回table的一个字段,若没有设置列标题则返回默认值,依次为A,B,C,...Z,AA,AB,..;
    // 若无此column,则返回一个空的String
    public Object getValueAt(int row, int col) {
        return p[row][col];
    }
    // 返回字段数据类型的类名称
	public Class getColumnClass(int c) {
        	return getValueAt(0, c).getClass();
    }
	// 返回指定字段是否可修改
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return true;
    }
	// 给指定字段赋值,并通知table已修改
	public void setValueAt(Object value, int row, int col) {
        	p[row][col] = value;
        	fireTableCellUpdated(row, col);
    }
	// 自定义修改某指定字段
    public void mySetValueAt(Object value, int row, int col) {
    	p[row][col] = value;
    }
}

    相关声明:

      若“Java Swing JTable使用例子”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。