jtable 定义 获取行数据

import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.table.TableColumn;
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
class Typec extends JFrame
{
//窗体及窗体控件
JPanel pnla=null;
JPanel pnlb=null;
JTable table=null;
TestModela md=null;
TestModelb mdb=null;
TableColumn tc=null;
javax.swing.JComboBox jc=null;
javax.swing.JCheckBox jboxa=null;
javax.swing.JCheckBox jboxb=null;
DataBase db=new DataBase();         //连接sql数据

javax.swing.JScrollPane js;
JButton but;
JTextField jt1=null;
JTextField jt2=null;
JTextField jt3=null;
JTextField jt4=null;
JTextField jt5=null;


//Object数组构造jtable
Object[][] a=new Object[2][3];
Object[] b={"a","b","c"};

  
//Object数组构造jtable
Object[][] aa={{"a","b","c"}};


//vector数组构造jtable
Vector va,vb,vc;

//实现功能
//1)将Object数组构造的jtable添加到窗体上去
//2)将JTable的第一列的属性改为文本框,第二列的属性改变为下拉框
void addObject()
{
    table=new JTable(a,b);
  
    tc=new TableColumn();
    jt1=new javax.swing.JTextField(10);
    jt1.setBackground(Color.red);
    jc=new JComboBox();
    jc.addItem("男");
    jc.addItem("女");
    tc=table.getColumnModel().getColumn(1);
    tc.setCellEditor(new DefaultCellEditor(jt1));
    tc=table.getColumnModel().getColumn(2);
    tc.setCellEditor(new DefaultCellEditor(jc));
  
    js=new JScrollPane(table);
    this.getContentPane().add(js,BorderLayout.CENTER);
    this.setSize(700,350);    //必须先添加后显示,不然会不正常的显示的
    this.show();  
}


//实现功能
//1)使用Object模板来创建JTable
//2) 实现JTable的表格边框的隐藏和显示b及指定列的隐藏和显示
void addObjectMd()
{
    pnla=new JPanel();
    jt1=new JTextField(10);
    but=new JButton("设置行高");
    but.addActionListener(new butsj());
    jboxa=new JCheckBox("隐藏",false);
    jboxa.addItemListener(new MyItemListener());
    jboxb=new JCheckBox("删除",false);
    jboxb.addItemListener(new MyItemListener());
    pnla.add(jt1);
    pnla.add(but);
    pnla.add(jboxa);
    pnla.add(jboxb);
    
       md=new TestModela(aa,b);    //使用模板必须数组里有值
       table=new JTable(md);  
       js=new JScrollPane(table);
    pnlb=(JPanel)this.getContentPane();
    pnlb.setLayout(new BorderLayout());
    pnlb.add(pnla,BorderLayout.NORTH);
    pnlb.add(js,BorderLayout.CENTER);
  
  
    this.setSize(700,350);    //必须先添加后显示,不然会不正常的显示的
    this.show();
      
}


void addVector()
{
  
    vc=new Vector();
    vc.add("va");
    vc.add("vb");
    vc.add("vc");
    va=new Vector();
    va.add(vc);
    vb=new Vector();
    vb.add("va");
    vb.add("vb");
    vb.add("vc");
    table=new JTable(va,vb);
    js=new JScrollPane(table);
    this.getContentPane().add(js,BorderLayout.CENTER);
    this.setSize(700,350);    //必须先添加后显示,不然会不正常的显示的
    this.show();  
}
void addVectorMd()                                      //czVector模板类
{

       //定义表中的一条数据,相当于一个一维数组
    vc=new Vector();
    vc.add("va");
    vc.add("vb");
    vc.add("vc");
    vc.add(new Boolean(false));
    va=new Vector();
    //将产生的数据增加到va中去
    va.add(vc);
    vb=new Vector();
    //定义JTable的标题
    vb.add("va");
    vb.add("vb");
    vb.add("vc");
    vb.add("vd");
       mdb=new TestModelb(va,vb);
    table=new JTable(mdb);
    //表格已构造完毕
  

    js=new JScrollPane(table);
    jt1=new JTextField(10);
       jt2=new JTextField(10);
       jt3=new JTextField(10);
       jt4=new JTextField(10);
    

       but=new JButton("增加");
       but.addActionListener(new butsj());
    
    pnla=new JPanel();
    pnla.add(jt1);
    pnla.add(jt2);
    pnla.add(jt3);
    pnla.add(jt4);

    pnla.add(but);
  
    pnlb=(JPanel)this.getContentPane();
    pnlb.setLayout(new BorderLayout());
    pnlb.add(pnla,BorderLayout.NORTH);
    pnlb.add(js,BorderLayout.CENTER);
    this.setSize(700,350);    //必须先添加后显示,不然会不正常的显示的
    this.show();  
}

    void addVectorSql()
    {
       DataBase.FillVector("select * from students");
             va=DataBase.data;     //获取数据库中的行数据
             vb=DataBase.title;    //获取数据库中的标题
          
             mdb=new TestModelb(va,vb);
             table=new JTable(mdb);
             js=new JScrollPane(table);
             pnla=new JPanel();
       pnlb=(JPanel)this.getContentPane();
       pnlb.setLayout(new BorderLayout());
       pnlb.add(pnla,BorderLayout.NORTH);
       pnlb.add(js,BorderLayout.CENTER);
       this.setSize(700,350);    //必须先添加后显示,不然会不正常的显示的
       this.show();  
    }    
处理Click事件
private class butsj implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
       if((e.getSource()==but)&&but.getText().equals("增加"))
       {
                 vc=new Vector();
                 vc.add(jt1.getText());
                    vc.add(jt2.getText());
                       vc.add(jt3.getText());
                    vc.add(new Boolean(jt4.getText().equalsIgnoreCase("true")));//将此 String 与另一个 String 进行比较,不考虑大小写。
                 mdb.AddRow(vc);    
       }
       else if((e.getSource()==but)&&but.getText().equals("设置行高"))
       {
      
       int h=Integer.parseInt(jt1.getText());//得到输入的值
       if(h>0)
          table.setRowHeight(h);//设置table的行高
       }
    
}
}

//处理CheckBox 的选中事件
    private class MyItemListener implements ItemListener
    {
     public void itemStateChanged(ItemEvent e)
     {
      //先判断事件源 再判断事件源是否被选中
     if(e.getSource()==jboxa)
        if(jboxa.isSelected())
         {
       //设置是否显示表格线
       table.setShowHorizontalLines(true);
       table.setShowVerticalLines(true);
         }
        else
         {
      
           table.setShowHorizontalLines(false);
           table.setShowVerticalLines(false);
           }
       //是否删除分数列
     if(e.getSource()==jboxb)
       if(jboxb.isSelected())//是否选中
       {
        tc=table.getColumnModel().getColumn(2);
        table.getColumnModel().removeColumn(tc);
        table.updateUI();
       }
       else
       {
        table.getColumnModel().addColumn(tc);
       }
    
     }
    }
  

}//这是Typec的右括弧,不要搞混啦
//使用Object创建jtable模板
class TestModela extends javax.swing.table.DefaultTableModel
{
Object[][] data;
Object[] title;
TestModela(Object[][] d,Object[] t)
{
    super(d,t);
    this.data=d;
    this.title=t;
}
public Object getValueAt(int r,int c)
{
    return data[r][c];//得到r行c列的数据
}
public Class getColumnClass(int c)
{
    //将不同的数据类型
    //以对应的形式来显示,大家可以比较这个例子中的显示
    //和前几个例子的区别
    return data[0][c].getClass();
}
//设置r行,c列的值为 value
//当用户在修改JTable中的数据时,能自动调用,并修改data中的数据
public void setValueAt(Object value, int r,int c)
{
    data[r][c]=value;
}
}
//使用Vector创建jtable模板
//对于JTable来说,它是一个二维结构,表中的整个数据由一个Vector
//表中的每一行也是一个Vector
class TestModelb extends javax.swing.table.DefaultTableModel
{
  
Vector a;
Vector b;
TestModelb(Vector a,Vector b)
{
    super(a,b);
    this.a=a;
    this.b=b;
}
public Object getValueAt(int c,int b)     //得到每一列的数据
{
    Vector v=(Vector)a.get(c);//取出可变数组中的数据
    return v.get(b);           //得到每一行没一列的值
}
public Class getColumnClass(int c)
{
    Vector v=(Vector)a.get(0);
    return v.get(c).getClass();     //将字符串变成各中类型的数据
}

      public boolean isCellEditable(int r,int c)
       {
        //除了第二列不能修改
        //其它都可能修改
        if(c==2)
            return false;
        return true;
          }


//在自定义的TableModel中重写了AddRow方法
//向data中增加一个Vector,相当于增加了一条记录
public void AddRow(Vector row)
{
    a.add(row);
    this.fireTableDataChanged();//通知所有侦听器,表的所有行单元格值可能已更改,如果不调用,将不会更改
}

//???????????????????如何实现删除行呢
}
/*
// 在pubs数据库中建一个表students
create table students(st_xh varchar(10),st_name varchar(10),st_age int)
insert into students
values('1000 0001','小王',25)
再建一个Odbc数据源test
联结pubs
*/
class DataBase                                                   //cz数据库类
{
           public static Connection conn=null;//这是一个连接对象
           public static ResultSet rs=null;//这是一个记录集对象
           public static Statement st=null;//这是一个语名对象
           public static PreparedStatement pst=null;//执行带参数据的语句
           public static CallableStatement cst=null;//执行存储过程
           public static ResultSetMetaData rsmd=null;//得到记录集的原信息
           public static Vector data,title,row;
           //在构造函数中去联结数据库
           public DataBase()
           {
                   data=new Vector();
                   title=new Vector();     //必须使用异常捕获,不然程序将报错
                   try{
                           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                           conn=DriverManager.getConnection("jdbc:odbc:test","sa","sa");
                           st=conn.createStatement();
                   }catch(SQLException e)
                   {
                           e.printStackTrace();
                   }catch(Exception e)
                   {
                           e.printStackTrace();
                   }
           }
           //根据strSql来向两个集合增加数据
           //data中存放表中的每条记录,每条记录也放入一个Vector中
           //title中存放表的列的信息,根据ResultSetMetaData来提供
           public static void FillVector(String strSql)
           {
                   int s;
                   int fieldCount;
                   try{
                     data.clear();
                     title.clear();
                   rs=st.executeQuery(strSql);//得到结果集
                   rsmd=rs.getMetaData();//得到结查集的原数据
                   fieldCount=rsmd.getColumnCount();
                   while(rs.next())
                   {
                           row=new Vector();
                           for(int i=0;i<fieldCount;i++)
                           {
                                   row.add(rs.getString(i+1));
                           }
         //及格就增加一个true否则增加一个false
         if(Integer.parseInt(row.get(row.size()-1).toString())>60)
                           row.add(new Boolean(true));
                           else
                           row.add(new Boolean(false));
                        
                           data.add(row);
                           System.out.println(data.size());
                   }
                   for(int i=0;i<rsmd.getColumnCount();i++)
                   {
                           title.add(rsmd.getColumnLabel(i+1));
                   }
                   title.add("Pass");
           }catch(SQLException e)
           {
                   e.printStackTrace();
      }
}
}

class test
{
public static void main(String args[])
{
    Typec tc=new Typec();

       //tc.addObject();
      // tc.addObjectMd();
        // tc.addVector();
        // tc.addVectorMd();
         tc.addVectorSql();
    
    
    
}
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值