ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲男人的天堂av,欧美一区自拍,69久久久久http://www.aygfsteel.com/amplifier/category/9019.htmlamplifier's java blog <br> <script type="text/javascript"><!-- google_ad_client = "ca-pub-5575070670019942"; /* blogjava */ google_ad_slot = "7055672771"; google_ad_width = 728; google_ad_height = 90; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>zh-cnFri, 09 Mar 2012 07:52:47 GMTFri, 09 Mar 2012 07:52:47 GMT60SWT里面加了TableEditor后如何删é™?/title><link>http://www.aygfsteel.com/amplifier/archive/2012/03/09/371567.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Fri, 09 Mar 2012 03:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/amplifier/archive/2012/03/09/371567.html</guid><wfw:comment>http://www.aygfsteel.com/amplifier/comments/371567.html</wfw:comment><comments>http://www.aygfsteel.com/amplifier/archive/2012/03/09/371567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/amplifier/comments/commentRss/371567.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/amplifier/services/trackbacks/371567.html</trackback:ping><description><![CDATA[SWT里TableEditor的作用是可以在表格里面显½CÞZ¸€äº›æŽ§ä»Óž¼Œä¾‹å¦‚列表、按钮等åQŒæœ‰æ—¶å€™æ˜¯æ ÒŽ®è¡¨æ ¼çš„内容在控äšg上显½CÞZ¸åŒå†…容的åQŒå¦‚果更æ–îCº†è¡¨æ ¼å†…容åQŒå°±è¦åŒæ—¶æ›´æ–°æŽ§ä»Óž¼Œä½†æ˜¯è¡¨æ ¼å†…容可以通过Table控äšgçš„removeAll()来清除,而表æ ég¸­çš„æŽ§ä»¶åˆ™æ— æ³•用这个方法清除,你调用Tableçš„removeAll()æ–ÒŽ³•åQŒå¾€è¡¨æ ¼é‡Œå¡«å…¥æ–°å†…容后,控äšg˜q˜æ˜¯ä¸Šæ¬¡çš„æŽ§ä»Óž¼Œä½†æ˜¯ä½ ä¸€æ“ä½œé‚£äº›æŽ§äšgž®×ƒ¼šå‡ºå¼‚常,提示那些控äšg已经disposedã€?br /><br />解决æ–ÒŽ³•是显式地调用控äšg及TableEditorçš„dispose()æ–ÒŽ³•åQŒåœ¨ä½ å¾ç«‹TableEditor的时候,把它的引用保存è“v来,把里面的控äšg的引用也保存èµäh¥åQŒåˆ°æ•´ä¸ªè¡¨æ ¼éœ€è¦çš„æ¸…除的时候,通过引用先把控äšgdispose掉,再把TableEditor也dispose掉,˜q™æ ·æ•´ä¸ªè¡¨æ ¼çš„内容就真正清除了ã€?br /><br />例如有一个表格名为tableåQŒé‡Œé¢çš„æ¯ä¸€è¡Œéƒ½æœ?列,½W¬ä¸€åˆ—是文本åQŒç¬¬äºŒåˆ—是ComboåQŒç¬¬ä¸‰åˆ—是Button,¾l˜åˆ¶è¡¨æ ¼çš„æ—¶å€™æ˜¯˜q™æ ·çš„:<br /><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">TableItem ti </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> TableItem(table,SWT.NONE);<br />ti.setText(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">some string</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />te </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> TableEditor(table);<br />Combo combo </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Combo(table,SWT.NONE);<br />controls.add(combo);<br />te.setEditor(combo,ti,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />Button button </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Button(table,SWT.NONE);<br />controls.add(button);<br />te.setEditor(button,ti,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);</span></div><br />其中teå’Œcontrols都是成员变量åQŒte的类型是TableEditoråQŒcontrols的类型是ArrayList<Control>ã€?br />当整个table要清除内å®ÒŽ—¶åQŒå¯ä»¥è¿™æ øP¼š<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">删除控äšg</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(Control control:controls){<br />control.dispose();<br />}<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">删除TableEditor</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">te.dispose();<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">删除文本</span><span style="color: #008000; "><br /></span><span style="color: #000000;">table.removeAll();<br /></span></div><img src ="http://www.aygfsteel.com/amplifier/aggbug/371567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/amplifier/" target="_blank">amp@java</a> 2012-03-09 11:09 <a href="http://www.aygfsteel.com/amplifier/archive/2012/03/09/371567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT的线½E‹é—´é€šä¿¡http://www.aygfsteel.com/amplifier/archive/2006/03/27/37646.htmlamp@javaamp@javaMon, 27 Mar 2006 09:29:00 GMThttp://www.aygfsteel.com/amplifier/archive/2006/03/27/37646.htmlhttp://www.aygfsteel.com/amplifier/comments/37646.htmlhttp://www.aygfsteel.com/amplifier/archive/2006/03/27/37646.html#Feedback0http://www.aygfsteel.com/amplifier/comments/commentRss/37646.htmlhttp://www.aygfsteel.com/amplifier/services/trackbacks/37646.html

在SWT中,通常需要开多个¾U¿ç¨‹æ¥æ‰§è¡Œä“QåŠ¡ï¼Œå› äØ“ä¸Èº¿½E‹äØ“UI¾U¿ç¨‹åQŒä¸èƒ½ç”¨å¤ªé•¿çš„æ—¶é—´æ¥æ‰§è¡ŒæŸä¸ªä»ÕdŠ¡åQŒå¦åˆ™ä¼šé€ æˆå¤±åŽ»å“åº”çš„å‡è±¡ã€?br />SWT的线½E‹é€šä¿¡æœ‰å‡ ä¸ªè¦æ³¨æ„çš„地方:
1、工作线½E‹è®¿é—®UI¾U¿ç¨‹ã€‚不能在非UI¾U¿ç¨‹ä¸­ç›´æŽ¥è®¿é—®UI控äšgçš„å€û|¼Œè¦èŽ·å¾—æˆ–è®„¡½®æŽ§äšg的值必™å»é€šè¿‡Display对象的asyncExec()或syncExec()函数åQŒä¸€èˆ¬çš„使用æ–ÒŽ³•是:

//代码AåQ?br /> 
Display disp  
=   Display.getDefault();
 
if  (disp  !=   null  )  {
   disp.asyncExec(
    
new   Runnable()  {
    
public    void   run()  {
       
//  在这里设¾|®æˆ–获得控äšg的值Â?/span>
 } 
} 
); 
} 

2、内部类与外部类的交‹¹ã€‚内部类调用外部¾cÕd±€éƒ¨å˜é‡æ—¶åQŒè¯¥å˜é‡å¿…须是final的,˜q™æ ·åœ¨å–得控件的值后˜q”回¾l™å¤–部类处理时就比较éºÈƒ¦ã€‚例如,在上面的代码ŒDµä¸­åQŒæœ‰ä¸ªåŒ¿åå†…部类实现了Runnable接口åQŒåœ¨é‡Œé¢çš„run()函数里可以访问到UI对象åQŒä½†æ˜¯ï¼Œå¾—到了对象的值怎么告诉外面的代码呢åQŸå‡å¦‚用普通的局部变量传递进去,ç”׃ºŽæ˜¯final的,是不能赋值的åQŒæ‰€ä»¥éœ€è¦æœ‰ä¸€ä¸ªå°è£…类来把需要返回的变量ž®è£…èµäh¥åQŒè¿™ä¸ªå°è£…类是final的,但里面的成员变量是可变的åQŒè¿™æ ·å°±æŠŠå†…部类里得到的东西传递到了外部,不过ä¼ég¹Žæ¯”较éºÈƒ¦åQŒä¸çŸ¥é“有没有更好的办法ã€?br />
//代码BåQ?br />
class
 StringWrapper {
   public String uiValue;
}
StringWrapper sw 
= new StringWrapper(); 
Display disp  
=  Display.getDefault();
 
if (disp != null )  {
   disp.asyncExec(
    
new  Runnable()  {
    
public  void  run()  {
        sw.uiValue 
= text.getText();//假设text是一个文本框对象
       
// 在这里设¾|®æˆ–获得控äšg的值Â?/span>
    } 
   } 
   ); 
} 
//˜q™é‡Œž®±å¯ä»¥å¯¹sw.uiValueçš„å€ÆD¿›è¡Œè®¿é—?/span>
3、线½E‹é—´çš„同步。在上面的代码B中,通过asyncExec()函数来取得控件的值所需要的旉™—´æ¯”较长,如果在后面马上访问那些值是得不到的åQŒäºŽæ˜¯å°±éœ€è¦æœ‰ä¸ªåŒæ­¥çš„问题åQŒå³åœ¨æŽ§ä»¶å€¼å–得之前先不进行下一步操作。可以通过synchronized块及wait()åQŒnotify()机制来实现同步ã€?br />
//代码CåQ?/span>

class StringWrapper {
   
public String uiValue;
}
StringWrapper sw 
= new StringWrapper(); 
Display disp  
=  Display.getDefault();
 
if (disp != null )  {
   disp.asyncExec(
    
new  Runnable()  {
    
public  void  run()  {
        
synchronized(sw){
          sw.uiValue 
= text.getText();//假设text是一个文本框对象
            sw.notify();
         }
       
// 在这里设¾|®æˆ–获得控äšgçš„å€?/span>
 
    } 
   } 
   ); 
}
synchronized(sw){
  sw.wait();
} 
//˜q™é‡Œž®±å¯ä»¥å¯¹sw.uiValueçš„å€ÆD¿›è¡Œè®¿é—?/span>

但是˜q™é‡Œä¼šå¸¦æ¥ä¸€ä¸ªé—®é¢˜ï¼Œå‡å¦‚很快ž®Þpƒ½å–得控äšgçš„å€û|¼Œä½†åŽé¢è¿˜æœ‰å¾ˆé•¿ä¸€ŒD‰|—¶é—´æ‰ä¼šç”¨åˆ°è¯¥å€û|¼Œå¦‚果把sw.wait()语句攑֜¨æ¯”较后的地方åQŒå°±æœ‰å¯èƒ½é€ æˆæ­»é”åQŒå› ä¸ºsw已经被notify之后才开始wait的,再没有其他线½E‹æ¥notify它了åQŒå®ƒž®±åªèƒ½ä¸€ç›´waitä¸‹åŽ»â€¦â€¦ã€‚äØ“äº†è§£å†Œ™¿™ä¸ªé—®é¢˜ï¼Œå¯ä»¥(1)把sw.wait()紧跟在disp.asyncExec()后面åQ?2)¾l™wait()讄¡½®ä¸€ä¸ªtimeout参数åQŒåˆ°äº†ä¸€å®šçš„æ—‰™—´˜q˜æ²¡æœ‰ä¸œè¥¿notify它,它就自己­‘…时。但˜q™ä¸¤¿UåŠžæ³•ä¼¼ä¹Žéƒ½æ¯”è¾ƒç‰µå¼ºåQŒæ²¡æœ‰å­‘³çš„保证åQŒJDK文档里面有个例子åQŒæ˜¯ç”¨while来判断是否已¾lè¾¾åˆîCº†è¦æ±‚åQŒå¦‚果已¾lè¾¾åˆîCº†ž®×ƒ¸å†waitã€?br />
//代码DåQ?/span>

class StringWrapper {
   
public String uiValue;
   
public boolean isValueSet;//是否已经取得了控件的�/span>
}
StringWrapper sw 
= new StringWrapper(); 
sw.isValueSet 
= false;
Display disp  
=  Display.getDefault();
 
if (disp != null )  {
   disp.asyncExec(
    
new  Runnable()  {
    
public  void  run()  {
        
synchronized(sw){
          sw.uiValue 
= text.getText();//假设text是一个文本框对象
            sw.isValueSet = true;
            sw.notify();
         }
       // 在这里设¾|®æˆ–获得控äšgçš„å€?/span>
 
    } 
   } 
   ); 
}
synchronized(sw){
  
while(!sw.isValueSet){
    
try{
      sw.wait();
    }
catch (InterruptedException e){
    }
  }
} 
//˜q™é‡Œž®±å¯ä»¥å¯¹sw.uiValueçš„å€ÆD¿›è¡Œè®¿é—?/span>




amp@java 2006-03-27 17:29 发表评论
]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ×ÓÖÞÏØ| ´ó³ÇÏØ| ×ÊÑôÊÐ| Ê¯Â¥ÏØ| ËàÄÏ| ÔªÄ±ÏØ| ξÊÏÏØ| ¶¼°²| ºÚºÓÊÐ| ÑôÐÂÏØ| ÃÀ¹ÃÏØ| ÀàÎÚÆëÏØ| ¹«Ö÷ÁëÊÐ| íìíôÏØ| ·½ÕýÏØ| ÇúÎÖÏØ| É̶¼ÏØ| ͳ·¬ÊÐ| ¶«Ïç×å×ÔÖÎÏØ| °×³ÇÊÐ| ´ó¸ÛÇø| ²ýÄþÏØ| °ÍÄÏÇø| ½ðÉ½Çø| ÄϹ¬ÊÐ| ʯÆÁÏØ| ³¤ÀÖÊÐ| ̨ÖÐÊÐ| ÔÆÃÎÏØ| ÑÀ¿ËʯÊÐ| Ìï¶«ÏØ| аͶû»¢ÓÒÆì| À´·ïÏØ| ¸ÞÀ¼ÏØ| áÓÖÝÊÐ| ÄÏ·áÏØ| Ïî³ÇÊÐ| ¶¼½­ÑßÊÐ| Ë«½­| ̨ÄÏÊÐ| Áú¾®ÊÐ|