<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    West Farm
    吾本布衣,生于川北,躬耕于代碼的田地上。
    posts - 16,  comments - 15,  trackbacks - 0

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    import org.eclipse.core.databinding.observable.value.IObservableValue;
    import org.eclipse.jface.databinding.swt.SWTObservables;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.custom.LineStyleEvent;
    import org.eclipse.swt.custom.LineStyleListener;
    import org.eclipse.swt.custom.StyleRange;
    import org.eclipse.swt.custom.StyledText;
    import org.eclipse.swt.custom.VerifyKeyListener;
    import org.eclipse.swt.events.TraverseEvent;
    import org.eclipse.swt.events.TraverseListener;
    import org.eclipse.swt.events.VerifyEvent;
    import org.eclipse.swt.graphics.Color;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.wb.swt.SWTResourceManager;

    /**
     * 關(guān)鍵字高亮編輯器。This class is a simple customized widget that wrappes a  {
    @link org.eclipse.swt.custom.StyledText StyledText}. 
     * It consumes a keyword array and highlight them.
     * 
    @author ggfan@amarsoft
     *
     
    */
    public class KeywordsHighlightingEditor extends Composite{
        
        
    private Color color = SWTResourceManager.getColor(SWT.COLOR_BLUE);
        
        
    private Color variableColor = SWTResourceManager.getColor(SWT.COLOR_DARK_GREEN);

        
    private String[] keywords;
        
        
    private StyledText st;
        
        
    public void setKeywordsColor(Color color){
            
    this.color = color;
        }
        
        
    public void setKeywordsBgColor(Color color){
        
        }
        
        
    public IObservableValue observerContent(){
            
    return SWTObservables.observeText(st, SWT.Modify);
        }

        
    public KeywordsHighlightingEditor(Composite parent, String[] keywords) {
            
    super(parent, SWT.NONE);
            
    this.keywords = keywords;
            
    this.setLayout(new FillLayout());
            st 
    = new StyledText(this, SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
            
    // 禁止回車鍵換行
            st.addVerifyKeyListener(new VerifyKeyListener(){
                
    public void verifyKey(VerifyEvent event) {
                    
    if(event.keyCode == SWT.CR){
                        event.doit 
    = false;
                    }
                }
            });
            
    // Tab鍵失去焦點而不是插入制表符
            st.addTraverseListener(new TraverseListener(){
                
    public void keyTraversed(TraverseEvent e) {
                    
    if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
                        e.doit 
    = true;
                    }
                }
            });
            st.addLineStyleListener(
    new SQLSegmentLineStyleListener());
        }
        
        
    private class SQLSegmentLineStyleListener implements LineStyleListener {

            @Override
            
    public void lineGetStyle(LineStyleEvent event) {
                
    if(keywords == null || keywords.length == 0){
                    
    return;
                }
                List
    <StyleRange> styles = new ArrayList<StyleRange>();
                
    int start = 0;
                
    int length = event.lineText.length();
                
    while (start < length) {
                    
    if (Character.isLetter(event.lineText.charAt(start))) {
                        StringBuffer buf 
    = new StringBuffer();
                        
    int i = start;
                        
    for (; i < length && Character.isLetter(event.lineText.charAt(i)); i++) {
                            buf.append(event.lineText.charAt(i));
                        }
                        
    if(Arrays.asList(keywords).contains(buf.toString())) {
                            styles.add(
    new StyleRange(event.lineOffset + start, i - start, color, null, SWT.BOLD));
                        }
                        start 
    = i;
                    }
    else if (event.lineText.charAt(start) == '#') {
                        StringBuffer buf 
    = new StringBuffer();
                        buf.append(
    '#');
                        
    int i = start + 1;
                        
    for (; i < length && Character.isLetter(event.lineText.charAt(i)); i++) {
                            buf.append(event.lineText.charAt(i));
                        }
                        
    if(buf.toString().matches("#[a-zA-Z]+\\d?")) {
                            styles.add(
    new StyleRange(event.lineOffset + start, i - start, variableColor, null, SWT.NORMAL));
                        }
                        start 
    = i;
                    }
                    
    else{
                        start 
    ++;
                    }
                }
                event.styles 
    = (StyleRange[]) styles.toArray(new StyleRange[0]);
            }

        }
        
    }
    posted @ 2011-10-12 10:42 West Farmer 閱讀(933) | 評論 (0)編輯 收藏
    http://stackoverflow.com
    這個是英文的,比起國內(nèi)的的一些編程問答網(wǎng)站不知道要強多少倍。
    國內(nèi)的問答類網(wǎng)站,各種答非所問,各種閑聊,各種復(fù)制粘貼。

    do not google it before you think about it deep enough

    do not ask before you google it
    posted @ 2011-10-11 17:02 West Farmer 閱讀(190) | 評論 (0)編輯 收藏
    有的時候應(yīng)用程序會hold一個對象實例,隨著時間的推移,該對象所含的數(shù)據(jù)可能發(fā)生變化(比如調(diào)用setter方法改變一個屬性的值)。
    那么如何明確相比于一個特定的時刻,某個對象實例中的數(shù)據(jù)發(fā)生了變化呢?

    方法肯定不止一種,我的方法是:
    public static String hashOf(Serializable object) throws IOException, NoSuchAlgorithmException {
            ByteArrayOutputStream baos 
    = new ByteArrayOutputStream();
            ObjectOutputStream oo 
    = new ObjectOutputStream(baos);
            oo.writeObject(object);
            oo.flush();
            
            MessageDigest messageDigest 
    = MessageDigest.getInstance("MD5");
            
    byte[] data = baos.toByteArray();
            
            oo.close();
            baos.close();

            messageDigest.update(data, 
    0, data.length);
            BigInteger hash 
    = new BigInteger(1, messageDigest.digest());
            
    return String.format("%1$032X", hash);
    }

    說白了就是把一個對象實例看作byte數(shù)組,然后對這個byte數(shù)組計算MD5,如果MD5值一樣就表示所含數(shù)據(jù)一致。
    MD5算法不是完美的,但是在實際應(yīng)用中已經(jīng)足夠的,你也可以使用CRC32。

    歡迎指正。
    posted @ 2011-10-11 16:51 West Farmer 閱讀(315) | 評論 (0)編輯 收藏
         摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package amarsoft.rcp.base.widgets;import java.io.File;import java.io.FileInputStream;im...  閱讀全文
    posted @ 2011-10-11 16:28 West Farmer 閱讀(1543) | 評論 (2)編輯 收藏
    僅列出標題
    共2頁: 上一頁 1 2 

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲综合无码一区二区| 亚洲免费日韩无码系列| 亚洲在成人网在线看| 美女被cao网站免费看在线看| 亚洲熟妇av一区二区三区漫画| 一级黄色毛片免费看| 亚洲国产精品狼友中文久久久 | 美女被爆羞羞网站在免费观看| 成人免费无码大片A毛片抽搐| 亚洲kkk4444在线观看| 好爽…又高潮了毛片免费看| 亚洲国产精华液2020| 国产不卡免费视频| 一边摸一边桶一边脱免费视频| 久久精品夜色噜噜亚洲A∨| 久久最新免费视频| 亚洲电影国产一区| 在线观看H网址免费入口| 伊人久久五月丁香综合中文亚洲| 女性无套免费网站在线看| 黄色一级视频免费| 亚洲精品国产品国语在线| 24小时免费看片| 中文字幕亚洲情99在线| 免费在线不卡视频| 黄色网站软件app在线观看免费| 久久久久亚洲AV无码专区首JN| 好大好硬好爽免费视频| 国产精品福利片免费看| 久久精品国产96精品亚洲| 日韩一区二区a片免费观看| 国产午夜亚洲精品不卡| 亚洲高清国产AV拍精品青青草原| 亚洲一区免费视频| 亚洲AV综合永久无码精品天堂| 亚洲日韩精品一区二区三区无码 | 亚洲日韩一区二区一无码| 亚洲日本在线观看视频| 最近免费中文在线视频| 亚洲AV日韩AV永久无码色欲| 亚洲无码在线播放|