<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;

    /**
     * 關鍵字高亮編輯器。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 閱讀(940) | 評論 (0)編輯 收藏
    http://stackoverflow.com
    這個是英文的,比起國內的的一些編程問答網站不知道要強多少倍。
    國內的問答類網站,各種答非所問,各種閑聊,各種復制粘貼。

    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 閱讀(196) | 評論 (0)編輯 收藏
    有的時候應用程序會hold一個對象實例,隨著時間的推移,該對象所含的數據可能發生變化(比如調用setter方法改變一個屬性的值)。
    那么如何明確相比于一個特定的時刻,某個對象實例中的數據發生了變化呢?

    方法肯定不止一種,我的方法是:
    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數組,然后對這個byte數組計算MD5,如果MD5值一樣就表示所含數據一致。
    MD5算法不是完美的,但是在實際應用中已經足夠的,你也可以使用CRC32。

    歡迎指正。
    posted @ 2011-10-11 16:51 West Farmer 閱讀(319) | 評論 (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 閱讀(1549) | 評論 (2)編輯 收藏
    僅列出標題
    共2頁: 上一頁 1 2 

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲黄色激情视频| 久久精品免费全国观看国产| 亚洲一级片免费看| 最近的2019免费中文字幕| 无套内谢孕妇毛片免费看看| 亚洲一级毛片视频| 久久精品国产亚洲AV| 色老头综合免费视频| 亚洲情A成黄在线观看动漫软件| 国产午夜亚洲精品午夜鲁丝片| 日韩内射激情视频在线播放免费| 精品四虎免费观看国产高清午夜| 色婷婷六月亚洲婷婷丁香| 亚洲精品成人网站在线播放 | 韩国免费a级作爱片无码| 好猛好深好爽好硬免费视频| heyzo亚洲精品日韩| 免费精品国产自产拍观看| 国产国产人免费视频成69堂| 日本免费无遮挡吸乳视频电影| 美女一级毛片免费观看| 久久久久亚洲精品天堂| 免费观看国产精品| 一区二区三区亚洲视频| 一级做a爰性色毛片免费| 在线观看亚洲免费| 国产乱人免费视频| 精品无码专区亚洲| 色婷婷综合缴情综免费观看| 青柠影视在线观看免费高清 | 精品亚洲成A人无码成A在线观看| 亚洲人成网7777777国产| 免费人成激情视频在线观看冫| 亚洲av午夜福利精品一区| 亚洲fuli在线观看| 免费看的一级毛片| 亚洲国产美国国产综合一区二区| 91网站免费观看| 国产亚洲精品美女久久久久 | 亚洲精品高清视频| 日本免费中文字幕在线看|