9910

单飞

   :: 首页 :: 联系 :: 聚合  :: 管理

#

MultiPageEditorPart 的addPage方法
public int addPage(Control control)
    {
        
int i = getPageCount();
        addPage(i, control);
        
return i;
    }

    
public void addPage(int i, IEditorPart ieditorpart, IEditorInput ieditorinput)
        
throws PartInitException
    {
        IEditorSite ieditorsite 
= createSite(ieditorpart);
        ieditorpart.init(ieditorsite, ieditorinput);
        Composite composite 
= new Composite(getContainer(), getOrientation(ieditorpart));
        composite.setLayout(
new FillLayout());
        ieditorpart.createPartControl(composite);
        ieditorpart.addPropertyListener(
new IPropertyListener() {

            
public void propertyChanged(Object obj, int j)
            {
                handlePropertyChange(j);
            }

        }
);
        CTabItem ctabitem 
= createItem(i, composite);
        ctabitem.setData(ieditorpart);
        nestedEditors.add(ieditorpart);
    }

那么有办法把一个EditorPart 加入Composite再放到Page里面呢?
public void addHtmlPage(IEditorPart ieditorpart, IEditorInput ieditorinput) throws PartInitException {
        
final SashForm sashForm = new SashForm(getContainer(), SWT.NONE);
        
        
final Composite pageContainer = new Composite(sashForm, SWT.NONE);
        sashForm.setSashWidth(
1);
        
        
final Composite resultContainer = new Composite(sashForm, SWT.NONE);
        resultContainer.setLayout(
new FillLayout());
        
        sashForm.setWeights(
new int[] {11 });        
        createAnalyzePage(resultContainer);
        
        IEditorSite ieditorsite 
= createSite(ieditorpart);
        ieditorpart.init(ieditorsite, ieditorinput);

        pageContainer.setLayout(
new FillLayout());
        ieditorpart.createPartControl(pageContainer);
        ieditorpart.addPropertyListener(
new IPropertyListener() {

            
public void propertyChanged(Object obj, int j) {
                handlePropertyChange(j);
            }

        });
        
        
        
int index = addPage(sashForm);
        setPageText(index, 
"html");
    }
视乎这样就可以了,但是问题出现了.缺少了父类nestedEditors.add(ieditorpart);对editor生命周期的管理.导致属性编辑器出问题.怎么解决呢?
    private CTabFolder container;
    
private ArrayList nestedEditors;

MultiPageEditorPart 声明的都是私有的属性,按照面向对象的设计是不能被继承者访问的.
那怎么办呢?这时候就该使用锤子了."Reflect"

CTabFolder container = (CTabFolder) getParentFileValue(MultiPageEditorPart.class,(MultiPageEditorPart)this"container");
        CTabItem ctabitem 
= new CTabItem(container, 0, i);
        ctabitem.setControl(composite);
        ctabitem.setData(ieditorpart);
        ArrayList nestedEditors 
= (ArrayList) getParentFileValue(MultiPageEditorPart.class,(MultiPageEditorPart)this"nestedEditors");
        nestedEditors.add(ieditorpart);

public static Object getParentFileValue(Class parentClassType,Object object, String filedName) {
        Field fild = null;
        Object fildValue = null;
        try {
            fild = parentClassType.getDeclaredField(filedName);
            fild.setAccessible(true);// 设置安全检查,访问私有成员变量必须
            fildValue = fild.get(object);

        } catch (NoSuchFieldException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return fildValue;
    }

呵呵,问题解决了.

posted @ 2009-05-27 10:31 单飞 阅读(344) | 评论 (0)编辑 收藏

日本程序员: 非常仔细。我认为很主要的一个原因是日本公司的需求非常细致。细致到在网页上,连一个像素都不能偏差的地步。另外,日本人的执行力非常强,对老板的承诺比 命还重要。一个项目可以做到连续3个月天天加班,每天只睡4个小时。然而,高执行力背后的代价是低创造力。在日新月异的互联网今天,很少听说日本工程师发 明了哪些重要的技术。善于做领导想做的事.
印度程序员: 流程做得好,文档写得好。但是他们写代码的能力,我个人的观点是一般般。我想这里面有两层原因。一是有相当一部分在美国工作的印度程序员是半路出家。转行 做程序员是为了生存而已。二是印度程序员在算法,数据机构等基本功方面的水平明显低于中国程序员的。这就导致他们写的很多代码逻辑性不强和性能不优(以我 的标准来看)。不过这两个问题在一定程度上被大量的文档和高性能的硬件设备弥补和掩盖了。善于说领导想听的话.
美国程序员: 美国程序员千奇百怪,好像很难只用几个词来定义他们。喜欢技术,甚至崇尚技术。这点在硅谷尤为突出。这就导致每个技术领域中都有一些人会废寝忘食地钻研。其实这和打游戏一样,如果你着了迷,自然会忘了吃,忘了喝,拼命地玩。我所认识的美国程序员还有一个特点,才艺能力都不错。这会让老板有时候很头疼,因为程序员不那么“听话”。他们不是给老板交差,而是要实现自己的想法,自己的设计,自己的完美。说白了,就是美国程序员有时候想法多了点。
中国的程序员: 比较注重理论知识。反过来,实践能力就相对差些。我们的程序员执行能力并不差,但在解决问题的能力上明显不足。往往需要把任务分解得很细以后才能完成,独立解决问题的能力不够。另外在表达能力上也相对差些。比较浮躁和急功近利。真正能够沉下心来钻研技术,热爱技术的是凤毛麟角。我在面试的时候,常常发现工程师知识面还挺广,但深度几乎没有。这样的人很难在技术领域有所作为。

在技术管理上,很多国内的公司把工程师简单地作为资源,过于强调流程管理和资源管理。我的观点是:工程师不是高级蓝领,不能以管理生产线的方式来进行管理。优良的环境只有靠大家一起来创造。

对于程序员来讲,也不要过分的去区分彼此的不同,天道酬勤,一份耕耘一份收获.不论是做开发,还是做管理工作.


posted @ 2009-05-21 16:09 单飞| 编辑 收藏

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    
<mx:Script>
        
<![CDATA[
            import mx.graphics.codec.PNGEncoder;
            import mx.graphics.codec.JPEGEncoder;
            import mx.utils.Base64Encoder;
            private var encoder:Base64Encoder;
            private var encodeTarget:ByteArray;
            
            private function loadImage():void
            {
                indentityImg.load(imageSrc.text);
            }
            
            private function encodeImage():void
            {                
                var bmp:Bitmap = indentityImg.content as Bitmap;
                var bmpData:BitmapData = bmp.bitmapData;
                switch("jpg"){
                    case "bmp":
                        encodeTarget = bmpData.getPixels(bmpData.rect);
                        break;
                    case "jpg":
                        var jpg:JPEGEncoder = new JPEGEncoder(100);
                        encodeTarget = jpg.encode(bmpData);
                        break;
                    case "png":
                        var png:PNGEncoder = new PNGEncoder();
                        encodeTarget = png.encode(bmpData);
                        break;
                }
                
                encodeTarget.position = 0;
                
                encoder = new Base64Encoder();
                encoder.insertNewLines = false;
                encoder.reset();
                encoder.encodeBytes(encodeTarget,0,encodeTarget.length);
                resultTxt.text = encoder.flush();
            }
        
]]>
    
</mx:Script>
    
<mx:Image id="indentityImg" x="10" y="64" width="187" height="112" source="image2.jpg"/>
    
<mx:Button x="458" y="5" label="fetch" click="loadImage()"/>
    
<mx:Button x="260" y="169" label="encode" click="encodeImage()"/>
    
<mx:TextArea x="10" y="210" width="317" height="158" id="resultTxt" wordWrap="true" editable="false"/>
    
<mx:Label x="10" y="184" text="result" width="115"/>
    
<mx:TextInput id="imageSrc" x="10" y="5" width="425" editable="true">
        
<mx:text>http://avatar.profile.csdn.net/7/B/4/1_remote_roamer.jpg</mx:text>
    
</mx:TextInput>    
    
</mx:Application>
posted @ 2009-04-28 11:29 单飞 阅读(383) | 评论 (0)编辑 收藏

System.loadLibary()

The parameter to System.loadLibrary() should be the name of the libary, without path, extension or "lib":

1: System.loadLibrary("payment");

Depending on your platform, this will load libpayment.so or payment.dll.

Although it is not an error to call System.loadLibrary() multiple times, loading the libraries is often done in a static code block:

1: class Test {
2: static {
3: System.loadLibrary("payment");
4: }
5: }

java.library.path



Java searches several directories for this libary file. The directories to search are specified in the property java.library.path. On Linux, this is a copy of the environment variable LD_LIBRARY_PATH. On Windows, it is a copy of the PATH variable.

Although changing the java.library.path has influence on how Java loads its libraries, it has no effect on Windows. When your library depends on other DLLs, these are loaded without taking java.library.path into account. If the library you load needs another library, which can not be found, you get an UnsatisfiedLinkError with the message "Can't find dependent libraries". To solve this, you can load the dependant libraries yourself using multiple calls to System.loadLibrary(), loading all libaries one by one.


就是说假如你要加载的Dll依赖其它dll那你就要自己手工加载在Windows平台。


posted @ 2009-04-27 12:10 单飞 阅读(1461) | 评论 (0)编辑 收藏

util.js工具包包含了一些实用函数来帮助你用javascript操作从服务器返回的数据数据,以便来更新web页面。 也可以在DWR以外使用它,因为它不依赖于DWR的其他部分。下面介绍这个工具的主要函数。
7.13.1 $()函数
$() 函数实现的功能相当于 document.getElementById方法。 因为在Ajax程序中,经常需要写很多这样的语句,所以使用 $() 会更简洁。它通过指定的id来查找当前HTML文档中的元素,如果传递给它多个参数,它会返回找到的元素的数组。所有非String类型的参数会被原封不 动的返回。这个函数的灵感来至于prototype库,但是它可以在更多的浏览器上运行。
$() 函数的使用方法为:
var searchexp = $("searchbox").value
<!—对应HTML表单的ID-->
<input id="searchbox"/>
7.12.2 addOptions与 removeAllOptions函数
在DWR项目应用中,经常需要根据所选项来填充选择列表。这现这种功能可能通过调用addOptions与 removeAllOptions函数来填充或移除列表。例如,如果希望在更新了select以后,它仍然保持更新前的选择项,实现方法如下:
var sel = dwr.util.getValue(id);
dwr.util.removeAllOptions(id);
Array array = new Array[ 'Africa', 'America', 'Asia', 'Australasia', 'Europe' ];   
dwr.util.addOptions("id ",array);  
dwr.util.setValue(id, sel);
如果想加入一个初始的"请选择..." 选项,那么可以直接加入下面的语句:
dwr.util.addOptions(id, \["请选择 ..."]);
dwr.util.addOptions有5种模式,分别为:
 数组模式:dwr.util.addOptions(selectid, array) 会创建多个option,每个option的文字和值都是数组元素中的值。
 对象数组模式:(指定text): dwr.util.addOptions(selectid, data, prop) 用数组中的每个元素创造一个option,option的值和文字都是在prop中指定的对象的属性。例如:  
dwr.util.addOptions( "demo",   
                 [{ name:'Africa', id:'AF' },   
                  { name:'America', id:'AM' },   
                  { name:'Asia', id:'AS' },   
                  { name:'Australasia', id:'AU' },   
                  { name:'Europe', id:'EU' } ],'id','name');  
 对象数组模式: (指定text和value值): dwr.util.addOptions(selectid, array, valueprop, textprop) 用数组中的每个元素创造一个option,option的值是对象的valueprop属性,option的文字是对象的textprop属性。 这种情况下,你需要指定要显示 beans 的 property 以及 对应的 bean 值,例如:  
public class Person {   
      private String name;   
      private Integer id;   
      public void set(){……}   
      public String get(){……}   
   }   
dwr.util.addOptions("demo",array,'id','name');   
其中id指向及bean的id属性,在optiong中对应value,name指向bean的name属性,对应下拉框中显示的哪个值。
 对象模式: dwr.util.addOptions(selectid, map, reverse)用每个属性创建一个option。对象的属性名用来作为option的值,对象的属性值用来作为属性的文字,如果reverse参数被设 置为true,那么对象的属性值用来作为选项的值。
 对象的Map模式:dwr.util.addOptions(selectid, map, valueprop, textprop) 用map中的每一个对象创建一个option。用对象的valueprop属性做为option的value,用对象的textprop属性做为 option的文字。
 ol 或 ul 列表模式:dwr.util.addOptions(ulid, array) 用数组中的元素创建多个li元素,它们的innerHTML是数组元素中的值。这种模式可以用来创建ul和ol列表。
7.13.3 addRows与 removeAllRows函数
在 DWR应用中,通过addRows与 removeAllRows这两个函数来操作table表格,这个函数的第一个参数都是table、tbody、thead、tfoot的id。一般来说 最好使用tbody,因为这样可以保持header和footer行不变。它们的用法如下:
 dwr.util.removeAllRows()
dwr.util.removeAllRows(id);
通过table元素的id删除table中所有行。
如果要删除表格中的某一行,则可用如下方法:
function deleteRows(id)
{
var tbody=document.getElementById("tb1");// tbody 的id
var trow=document.getElementById(id);//要删除的行号
if(confirm("确定删除?"))
{
    tbody.removeChild(trow);
}
}
 dwr.util.addRows()
dwr.util.addRows(id, array, cellfuncs, [options]);
这行语句向指定id的table元素添加行。它使用数组中的每一个元素在table中创建一行。然后用cellfuncs从传递过来的行数据中提取单元格数据。其中参数:
 id: table元素的id(最好是tbody元素的id)
 array:数组或对象,做为更新表格数据。
 cellfuncs: 函数数组,从传递过来的行数据中提取单元格数据。
 options: 一个包含选项的对象,选项包括一个用来创建行的函数rowCreator(例如希望给tr加上css), 默认值是返回一个document.createElement("tr")。一个用来创建单元格的函数cellCreator(例如用th代替td)。 默认返回一个document.createElement("td")。下面就是一个向table元素添加行的应用例子,代码如下:
var cellFuncs = [
function(data) { return data; },
function(data) { return data.toUpperCase(); },
function(data) {
    return "<input type='button' value='提交' onclick='alert(\"测试\");'/>";
},
function(data) { return count++; }
];
var count = 1;
dwr.util.addRows( "t1", , cellFuncs, { escapeHtml:false });
<!—对应的HTML内容-->
<table border="1" width="110%"   id="table17" name="table17" height="27">
<tbody id="t1" name="t1">
</tbody>
</table>
7.13.4 getText函数
getText(id)和getValue(id)相似。用它可以得到select列表项目的显示的文本,而不是当前选项的值。
7.13.5 getValue函数
dwr.util.getValue(id) 可以从HTML元素中取出其中的值,这个函数能操作大多数HTML元素,其中包括select(去处当前选项的值而不是文字)、input元素(包括 textarea)、div和span。下面就是一个getValue函数的应用例子,实现代码如下:
<html>
<head>
   <title></title>
   <script type="text/javascript" src="dwr/util.js"></script>
   <script type="text/javascript" src="dwr/engine.js"></script>
   <script>
function getValue()
{
var cnId = dwr.util.getValue("myId");
var cnValue = dwr.util.getValue("myValue");
alert(dwr.util.getValue("myId"));
}
</script>
</head>
<body>
   <input type="text" value="" id="myId" />,
   <input type="text" value="" id="myValue" />
   <input type="button" value="setValue" onclick="getValue();" />
</body>
</html>
7.13.6 getValues函数
getValues() 得到的是包含name/value对的javascript对象。name是HTML元素的ID,value会被更改为这些ID对象元素的内容。 getValues()可以传入一个HTML元素(一个DOM对象或者id字符串)象。这个函数不会返回对象,它只更改传递给它的值。下面就是一个 getValues函数的应用例子,实现代码如下:
var person = { id:1, name:'tfnew21', address:'北京', salary:10000 };  
dwr.util.getValues(person);  
alert(person.name); //访问person对象的属于,运行后会在窗口中显示’tfnew21’字符串
dwr.util.getValues({textarea:null,select:null,text:null,password:null,button:null})   
alert(textarea.value);// 执行后textarea.value的值为"test"
//HTML中的代码
<input type="textarea" id="textarea" value="test" />
<input type="text" id="text" value="tfnew21" />
<input type="password" id="password" value="12345" />
<select id="select">
<option value="1" select>
香蕉
</option>
</select>
7.13.7 onReturn函数
定 义在输入框中按回车的响应,防止执行submit。当使用Ajax时,往往需要的触发一些Javscript。 不幸的是不同的浏览器处理这个事件的方式不一样。所以dwr.util.onReturn修复了这个差异。如果需要在一个表单元素中按回车时触发一些 Javscript,实现代码如下:
<input type="text" onkeypress="dwr.util.onReturn(event,submitFunction)"/>
<input type="button" onclick="submitFunction()"/>
这个函数的工作原理与onSubmit()事件相似,只能存在于<FORM >元素中。
7.13.8 selectRange函数
selectRange用于选择一个输入框中的一定范围的文字。 调用方法如下:
dwr.util.selectRange(ele, start, end)//ele输入ID,start开始位置,end结尾位置
例如:<input type="text" id="sel-test" value="0123456">   
dwr.util.selectRange("sel-test", 2, 5);  
7.13.9 setValue函数
dwr.util.setValue(id, value)根据第一个参数中指定的id找到相应元素,并根据第二个参数改变其中的值。 这个函数能操作大多数HTML元素,包括select、input元素(包括textarea)、div和span。例如:下面就是一个getValue 函数的应用例子,实现代码如下:
<html>
<head>
   <title></title>
   <script type="text/javascript" src="dwr/util.js"></script>
   <script type="text/javascript" src="dwr/engine.js"></script>
   <script>
function setValue()
{
var cnId = dwr.util.getValue("myId");
var cnValue = dwr.util.getValue("myValue");
dwr.util.setValue(cnId, cnValue);
alert(dwr.util.getValue("myId"));
}
</script>
</head>
<body>
   dwr.util.setValue(
   <input type="text" value="" id="myId" />,
   <input type="text" value="" id="myValue" />
   )
   <input type="button" value="setValue" onclick="setValue();" />
</body>
</html>
7.13.10 setValues函数
setValues() 和setValue()非常相似,但它传入的参数是一个拥有多个属性的javascript object,属性名称是html页面元素的id,属性value为html页面元素的value。下面就是一个setValues函数的应用例子,实现 代码如下:
<html>
<head>
   <title></title>
   <script type="text/javascript" src="dwr/util.js"></script>
   <script type="text/javascript" src="dwr/engine.js"></script>
   <script>
function setValue()
{
var cnId = {myAreaText:"tfnew21",myDiv:"ddr"};
dwr.util.setValues(cnId);

}
</script>
</head>
<body>
   <input type="button" value="setValue" onclick="setValue();" />
   <br />
   id=myAreaText
   <textarea id="myAreaText" value=""></textarea>
   <br />
   id=myDiv
   <div id="myDiv"></div>
</body>
</html>
7.13.11 toDescriptiveString函数
toDescriptiveString函数是带debug信息的toString,第一个为将要debug的对象,第二个参数为处理等级。等级如下:
0:单行调试
1:不分析子元素的多行调试
2: 最多分析到第二层子元素的多行调试
调用方法如下:
<input type="text" id="text">
dwr.util.toDescriptiveString("text",0);
7.13.12 useLoadingMessage函数
useLoadingMessage函数作用是当发出ajax请求后,页面显示的提示等待信息,调用方法如下:
function searchUser(){   
var loadinfo = "loading....."  
try{   
     regUser.queryAllUser(userList);   
     dwr.util.useLoadingMessage(loadinfo);           
}catch(e){   
  
}   
}

以上介绍了DWR的工用原理就实现方法,同时介绍了两个工具包的常用函数的用法,有关DWR的在项目中的具体应用,将在后面的在线书店电子商务系统中详细介绍,本节不在介绍。

posted @ 2009-04-22 15:13 单飞 阅读(865) | 评论 (0)编辑 收藏

String strResource = ((IResource)o).getLocation().makeAbsolute().toFile().getAbsolutePath();

这样才能获取到磁盘路径
posted @ 2009-04-21 16:27 单飞 阅读(228) | 评论 (0)编辑 收藏


import java.awt.Robot;
import java.awt.event.KeyEvent;

public class RobotUtil {
    
/**
     * path 不支持汉字
     * 
@param robot
     * 
@param line
     
*/
    
public static void printString(Robot robot, String line) {
        
char[] keys = line.toUpperCase().toCharArray();
        
for (char c : keys) {
            pressKey(robot, c);
        }
    }

    
public static void pressKey(Robot robot, char c) {
        
if (c == ':') {
            robot.keyPress(KeyEvent.VK_SHIFT);
            robot.keyPress(KeyEvent.VK_SEMICOLON);
            robot.keyRelease(KeyEvent.VK_SEMICOLON);
            robot.keyRelease(KeyEvent.VK_SHIFT);
        } 
else {
            
int k = (int) c;
            robot.keyPress(k);
            robot.keyRelease(k);
        }
    }

    
/**
     * 
@param args
     
*/
    
public static void main(String[] args) {
        
try {
            String path 
= "c:/temp/form/a.html";
            Robot robot;
            robot 
= new Robot();
            robot.delay(
1000);
            printString(robot, path);
        } 
catch (Exception e1) {
            
// TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}
posted @ 2009-04-21 14:33 单飞 阅读(166) | 评论 (0)编辑 收藏

Eclipse Plugin]ResourceBundle Editor(国际化资源文件编辑器

http://sourceforge.net/projects/eclipse-rbe


posted @ 2009-04-15 15:51 单飞 阅读(230) | 评论 (0)编辑 收藏

1.JNorm 能够帮助你分析代码中那些可以使用开源的项目代替。
  http://www.jnorm.org/
2.NWire 分析类之间的继承关系
  http://www.nwiresoftware.com
3.FindBugs 找到bug
  http://findbugs.sourceforge.net




posted @ 2009-04-15 09:27 单飞 阅读(158) | 评论 (0)编辑 收藏

    public static void setProxy(String ip,int port) throws RegistryErrorException{
        Regor reg 
= new Regor();
        Key ie 
= reg.openKey(Regor.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
        
if(ie!=null){
            reg.setValue(ie, 
"ProxyServer", ip+":"+port);
            reg.saveDword(ie, 
"ProxyEnable", Integer.toHexString(1));            
        }
    }
    
    
public static void disableProxy() throws RegistryErrorException{
        Regor reg 
= new Regor();
        Key ie 
= reg.openKey(Regor.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
        
if(ie!=null){
            reg.saveDword(ie, 
"ProxyEnable", Integer.toHexString(0));
            reg.setValue(ie, 
"ProxyServer""");
        }
    }
posted @ 2009-04-14 13:53 单飞 阅读(401) | 评论 (0)编辑 收藏

仅列出标题
共12页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 Last