我的JAVA窩! - BlogJava

          期末實(shí)踐中......

          今天成績(jī)都出來(lái)了,結(jié)果還是比較理想的,以后會(huì)相對(duì)輕松些。

          更新日志都是半個(gè)月前的事了,當(dāng)時(shí)還說(shuō)以后每天都更新,真是慚愧

          這幾天都是忙考試,弄得心力憔悴,今天晚上終于閑下來(lái),繼續(xù)寫實(shí)踐的程序。

          剛剛解決了前幾個(gè)小時(shí)的困惑,現(xiàn)在對(duì)JAVA的內(nèi)部類機(jī)制又有了更新的認(rèn)識(shí)(興奮中......),廢話少說(shuō),來(lái)看代碼:

          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("宣城供電局消弧線圈臺(tái)帳");
          ............
          ............
          ............
          ??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));”這行(代碼中蘭色那句)會(huì)報(bào)錯(cuò),編譯器提示“無(wú)法解析newItemTableItem”。我的第一反應(yīng)是監(jiān)聽器的位置放得不對(duì)。翻了一下書,說(shuō)SWT/JFace事件代碼中要訪問(wèn)類中變量有三種方法:(1)加final;(2)將變量變?yōu)轭惖膶?shí)例變量;(3)將事件代碼寫成命名內(nèi)部類,然后通過(guò)構(gòu)造函數(shù)的參數(shù)來(lái)傳入。
          ???想了想好象只有第三種方法值得試試,但是后來(lái)想起來(lái)newItemTableItem是個(gè)對(duì)象,傳入以后卻不知道怎么轉(zhuǎn)換類型,呆了...
          ???最后做了個(gè)新的程序試了試,在新程序里是成功的,就是要把newItemTableItem在main函數(shù)外申明其為private static,但是在舊的程序中,編譯器是通過(guò)了,但是進(jìn)行連接數(shù)據(jù)庫(kù)查詢的時(shí)候,出現(xiàn)“Fatal Exception...”的錯(cuò)誤,當(dāng)時(shí)一下就蒙掉了!!完全一樣的,怎么會(huì)不成功。
          ???百般無(wú)奈以后,----當(dāng)然之前肯定是深思熟慮----終于腦海中閃出了傳說(shuō)中的“靈感”!于是馬上把table也定義為private static......OK!???勝利總是來(lái)得那么突然,那瞬間的感覺(jué)就象90分鐘打進(jìn)的金球...

          ???當(dāng)然到現(xiàn)在,我還沒(méi)找到確切的原因。只能用自己的話總結(jié)一下:(1)匿名內(nèi)部類中的方法是不能訪問(wèn)其他方法中定義的變量的(包括實(shí)例對(duì)象),要訪問(wèn)必須在類中將其定義為static類型。(2)TableItem是Table的子控件,要定義TableItem為static也要同時(shí)把Table定義為static類型。

          ???給自己一個(gè)任務(wù):研究JAVA的內(nèi)部類機(jī)制;研究SWT中父子控件關(guān)系的機(jī)制!

          ???看看《Thinking in JAVA》或許會(huì)是個(gè)不錯(cuò)的選擇,當(dāng)然還有《The Definitive Guide to SWT and JFace》。

          ?

          posted on 2007-01-15 02:41 J2S 閱讀(312) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 肃宁县| 华池县| 化隆| 莱阳市| 怀远县| 汉中市| 土默特右旗| 双柏县| 兴海县| 西宁市| 个旧市| 通河县| 桦甸市| 呼伦贝尔市| 吉安县| 靖宇县| 凤凰县| 永春县| 雷山县| 辽宁省| 静安区| 云龙县| 沙河市| 佛山市| 丽江市| 辽宁省| 新郑市| 象州县| 黔南| 布尔津县| 扎鲁特旗| 崇明县| 吉安县| 民县| 上高县| 平阳县| 新源县| 开阳县| 新沂市| 浪卡子县| 博爱县|