Java实践期末,期末实践中......

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

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

339c68b0134f231d65e45e9a1bc5c8bc.gif

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

刚刚解决了前几个小时的困惑,现在对JAVA的内部类机制又有了更新的认识(兴奋中

23286a3e3a70895edf3d313b6cf00832.gif......),废话少说,来看代码:

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 阅读(249) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值