2012-06-15 27 views
8

के लिए लाइन नंबर दिखाएं मैं सोच रहा था कि StyledText टेक्स्ट फ़ील्ड के साथ लाइन नंबर प्रदर्शित करने का एक सीधा तरीका है - भले ही लाइनें लपेटें हों। मैं इसे अपने आवेदन में उपयोग कर रहा हूं और यदि सामग्री बड़ी हो जाती है, तो कुछ पंक्ति संख्याएं अच्छी होंगी।जावा एसडब्ल्यूटी स्टाइलडटेक्स्ट

धन्यवाद।

+0

जहां तक ​​मुझे पता है, वहां कोई सही सीधा तरीका नहीं है; आप हमेशा अपने टेक्स्ट एडिटर के बाईं ओर एक अवांछनीय टेक्स्ट बॉक्स डाल सकते हैं। – purtip31

+0

ग्रहण लड़कों का उपयोग कर रहे कार्यान्वयन की जांच करें। –

+0

@Adam वे दिखाए गए अनुसार 'SourceViewer' का उपयोग कर रहे हैं [http://www.dsource.org/projects/dwt/wiki/JFaceTextExample)। मैंने इस उदाहरण की कोशिश की, लेकिन किसी भी तरह से मैं इसे ठीक से चलाने में सक्षम नहीं था। यह रनटाइम पर अजीब चीजें कर रहा था। वैसे भी, मैं अपना 'स्टाइलटेक्स्ट' रखना चाहता हूं :) – kon

उत्तर

5

कुंजी org.eclipse.swt.custom.Bullet है। यह मूल रूप से एक प्रतीक है (या हमारे मामले में एक संख्या में) आप एक लाइन की शुरुआत में जोड़ सकते हैं।

//text is your StyledText 
text.addLineStyleListener(new LineStyleListener() 
{ 
    public void lineGetStyle(LineStyleEvent e) 
    { 
     //Set the line number 
     e.bulletIndex = text.getLineAtOffset(e.lineOffset); 

     //Set the style, 12 pixles wide for each digit 
     StyleRange style = new StyleRange(); 
     style.metrics = new GlyphMetrics(0, 0, Integer.toString(text.getLineCount()+1).length()*12); 

     //Create and set the bullet 
     e.bullet = new Bullet(ST.BULLET_NUMBER,style); 
    } 
}); 
+2

यह अच्छा काम करता है। यदि लाइनों की कुल मात्रा 9 से 10 तक बढ़ जाती है या फ़ाइल के बीच में लाइनों को हटा दिया जाता है तो यह सिर्फ सभी लाइनों को फिर से निकालने की याद आती है। धन्यवाद। – kon

1

मेरा मानना ​​है कि लाइन स्टाइललिस्टर का उपयोग करना चाहिए। की तर्ज पर कुछ:

styledText.addLineStyleListener(
    new LineStyleListener() { 
     @Override 
     public void lineGetStyle(LineStyleEvent event) { 
      String line = event.lineText; 
      int lineNumber = event.lineOffset; 
      // Do stuff to add line numbers 
     } 
    } 
); 
+0

क्या आप कृपया अपने दृष्टिकोण के बारे में कुछ और विवरणों का उल्लेख कर सकते हैं? वेब पर, मुझे बस एक लाइन की सामग्री को एक निश्चित तरीके से हाइलाइट करते हुए 'लाइन स्टाइल लिस्टनर' के उदाहरणों का एक गुच्छा मिला। [यह उदाहरण] (http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/TurnsecharactersredusingaLineStyleListener.htm)। धन्यवाद। – kon

1

यह गोलियों का उपयोग करने के लिए एक तरह से अपडेट हो जाता है कि संख्या है जब सामग्री में परिवर्तन:

text.addModifyListener(new ModifyListener() { 
    public void modifyText(ModifyEvent event) { 
     int maxLine = text.getLineCount(); 
     int lineCountWidth = Math.max(String.valueOf(maxLine).length(), 3); 

     StyleRange style = new StyleRange(); 
     style.metrics = new GlyphMetrics(0, 0, lineCountWidth * 8 + 5); 
     Bullet bullet = new Bullet(ST.BULLET_NUMBER, style); 
     text.setLineBullet(0, text.getLineCount(), null); 
     text.setLineBullet(0, text.getLineCount(), bullet); 
    } 
}); 
0

एक नोट के रूप में लाइन नंबर रंग के लिए:

Device device = Display.getCurrent(); 
style.background = new Color(device, LINE_NUMBER_BG); 
style.foreground = new Color(device, LINE_NUMBER_FG); 

जहां LINE_NUMBER_BG और LINE_NUMBER_FG एक आरजीबी ऑब्जेक्ट हो सकता है जैसे:

final RGB LINE_NUMBER_BG = new RBG(160, 80, 0); // brown 
final RGB LINE_NUMBER_FG = new RGB(255, 255, 255); // white 
4

यह मेरा कामकाजी कार्यान्वयन है। क्योंकि lineGetStyle() केवल वर्तमान में स्क्रीन पर लाइनों के साथ कहा जाता है

styledText.addLineStyleListener(new LineStyleListener() { 
    @Override 
    public void lineGetStyle(LineStyleEvent event) { 
     // Using ST.BULLET_NUMBER sometimes results in weird alignment. 
     //event.bulletIndex = styledText.getLineAtOffset(event.lineOffset); 
     StyleRange styleRange = new StyleRange(); 
     styleRange.foreground = Display.getCurrent().getSystemColor(SWT.COLOR_GRAY); 
     int maxLine = styledText.getLineCount(); 
     int bulletLength = Integer.toString(maxLine).length(); 
     // Width of number character is half the height in monospaced font, add 1 character width for right padding. 
     int bulletWidth = (bulletLength + 1) * styledText.getLineHeight()/2; 
     styleRange.metrics = new GlyphMetrics(0, 0, bulletWidth); 
     event.bullet = new Bullet(ST.BULLET_TEXT, styleRange); 
     // getLineAtOffset() returns a zero-based line index. 
     int bulletLine = styledText.getLineAtOffset(event.lineOffset) + 1; 
     event.bullet.text = String.format("%" + bulletLength + "s", bulletLine); 
    } 
}); 
styledText.addModifyListener(new ModifyListener() { 
    @Override 
    public void modifyText(ModifyEvent e) { 
     // For line number redrawing. 
     styledText.redraw(); 
    } 
}); 

ध्यान दें कि वाक्य रचना के संभावित भूमि के ऊपर जब बुला पुनः बनाने (पुन: गणना पर प्रकाश डाला), स्वीकार होने की संभावना है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^