文章详情页
				初次感觉java面向对象的思想
浏览:135日期:2024-06-17 15:10:31
					
					
					内容: /*创建了这个例子,初次感觉啦java的面向对象的精髓,jtable只用来显示,而使用模板来改变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//表中的每一行也是一个Vectorclass 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数据库中建一个表studentscreate table students(st_xh varchar(10),st_name varchar(10),st_age int)insert into studentsvalues('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;i60)       row.add(new Boolean(true));       else       row.add(new Boolean(false));      data.add(row);       System.out.println(data.size());     }     for(int i=0;i
					 标签:
						Java
					
					上一条:Java Flash教程下一条:Java相关术语大全
					
					
					
					
					
					相关文章:
1. Python小整数对象池和字符串intern实例解析2. 为什么Java中都不用a.equals(b)判断对象相等3. php中foreach遍历类对象的总结4. ASP中实现字符部位类似.NET里String对象的PadLeft和PadRight函数5. Java比较两个对象中全部属性值是否相等的方法6. JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法7. PHP 5.0对象模型深度探索之访问方式8. ASP中解决“对象关闭时,不允许操作。”的诡异问题……9. 浅谈java object对象在heap中的结构10. java对象拷贝常见面试题及应答汇总
排行榜
				
网公网安备