我的JAVA窝! - BlogJava

期末实践中......

今天成绩都出来了,结果还是比较理想的,以后会相对轻松些。

更新日志都是半个月前的事了,当时还说以后每天都更新,真是惭愧

这几天都是忙考试,弄得心力憔悴,今天晚上终于闲下来,继续写实践的程序。

刚刚解决了前几个小时的困惑,现在对JAVA的内部类机制又有了更新的认识(兴奋中......),废话少说,来看代码:

package tanzhang;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import com.swtdesigner.SWTResourceManager;
import org.eclipse.swt.widgets.TabItem;
public class tanzhang {

 /**
  * Launch the application
  * @param args
  */
 private static Table table;
 private static TableItem newItemTableItem;

 
 public static void main(String[] args) {
  final Display display = Display.getDefault();
  final Shell shell = new Shell();
  shell.setImage(SWTResourceManager.getImage(tanzhang.class, "/org/eclipse/ui/internal/forms/widgets/progress.gif"));
  shell.setSize(774, 514);
  shell.setText("宣城供电局消弧线圈台帐");
............
............
............
  final Combo combo_1 = new Combo(composite, SWT.READ_ONLY);
  combo_1.addSelectionListener(new SelectionAdapter() {
   public void widgetSelected(SelectionEvent arg0) {
    String str=combo_1.getText();
    try{ 
     String dbUrl = "jdbc:odbc:test";
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     Connection conn = DriverManager.getConnection(dbUrl, "", "");
     Statement stmt=conn.createStatement();
     String sql="SELECT * from test where 单元名称="+str;
     ResultSet rs=stmt.executeQuery(sql);
     
     if(rs.next()){
     for(int i=0;i<=4;i++){         
       newItemTableItem.setText(i,rs.getString(i+1));  
       }
     
     rs.close();
     stmt.close();
     conn.close();
     }
    }catch(Exception e){}
    
   }
  });
............
............
............

  table = new Table(composite_1, SWT.VIRTUAL | SWT.FULL_SELECTION | SWT.BORDER | SWT.HIDE_SELECTION);

  table.setLinesVisible(true);
  table.setHeaderVisible(true);
  table.setBounds(0, 0, 678, 80);
............
............
............

   刚开始是用final修饰table和newItemTableItem,但是“newItemTableItem.setText(i,rs.getString(i+1));”这行(代码中兰色那句)会报错,编译器提示“无法解析newItemTableItem”。我的第一反应是监听器的位置放得不对。翻了一下书,说SWT/JFace事件代码中要访问类中变量有三种方法:(1)加final;(2)将变量变为类的实例变量;(3)将事件代码写成命名内部类,然后通过构造函数的参数来传入。
   想了想好象只有第三种方法值得试试,但是后来想起来newItemTableItem是个对象,传入以后却不知道怎么转换类型,呆了...
   最后做了个新的程序试了试,在新程序里是成功的,就是要把newItemTableItem在main函数外申明其为private static,但是在旧的程序中,编译器是通过了,但是进行连接数据库查询的时候,出现“Fatal Exception...”的错误,当时一下就蒙掉了!!完全一样的,怎么会不成功。
   百般无奈以后,----当然之前肯定是深思熟虑----终于脑海中闪出了传说中的“灵感”!于是马上把table也定义为private static......OK!   胜利总是来得那么突然,那瞬间的感觉就象90分钟打进的金球...

   当然到现在,我还没找到确切的原因。只能用自己的话总结一下:(1)匿名内部类中的方法是不能访问其他方法中定义的变量的(包括实例对象),要访问必须在类中将其定义为static类型。(2)TableItem是Table的子控件,要定义TableItem为static也要同时把Table定义为static类型。

   给自己一个任务:研究JAVA的内部类机制;研究SWT中父子控件关系的机制!

   看看《Thinking in JAVA》或许会是个不错的选择,当然还有《The Definitive Guide to SWT and JFace》。

 

posted on 2007-01-15 02:41 J2S 阅读(302) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿(2)

随笔档案

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜