2016-03-29 44 views
1

SWT StyledText tabanlı bir (zengin) editör geliştiriyorum. Şimdiye kadar çözemediğim bir özellik var. Kullanıcının Ctrl + u tuşlarına bastığında, bir önceki satırın başlangıcı olarak imleci sekme genişliğine getirmesini istiyorum (kullanıcılar Enter tuşuna bastığında Eclipse veya Notepad ++ gibi). Birkaç yöntem denedim ama hiçbir şey benim için çalışmıyor. Lütfen örneğime bir bakın. Her öneri açığız. Şimdiden teşekkürler. Ben doğru anlamakSWT StyledText: Bir sonraki satırın satırını önceki satırın sekme genişliğine getir

StyledText text = new StyledText(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
    text.setTabs(5); 
    text.setText(""); 
    text.setLeftMargin(5); 
    text.setBounds(0, 0, 512, 391); 
    text.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyPressed(KeyEvent e) { 
      int currentLine = text.getLineAtOffset(text.getCaretOffset()); 
      int currCaretOffset = text.getCaretOffset(); 
      if(e.stateMask == SWT.CTRL && e.keyCode == 'u'){ 
       //text.setIndent(text.getOffsetAtLine(currentLine));//doesn't work 
       text.append("\n"); 
       //text.append("\t");//doesn't work 
       text.setCaretOffset(text.getCharCount()+text.getTabs());//doesn't work 
       System.out.println("caret offset "+text.getCaretOffset()); 
      }    
     } 
    }); 

cevap

2

, önceki satırda önündeki boşlukların olduğu gibi sonraki satıra imleci ve birçok "beyaz boşluk" tarafından Girintilemek istiyorum.

bu (ya da belki de sadece bir tane bulamadım) yapmak için daha iyi bir yolu yoktur şaşırdım ama bu işi yapacak:

private static final int TAB_WIDTH = 5; 

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("Stackoverflow"); 
    shell.setLayout(new FillLayout()); 

    StyledText text = new StyledText(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
    text.setTabs(TAB_WIDTH); 
    text.setText(""); 
    text.setLeftMargin(5); 
    text.setBounds(0, 0, 512, 391); 
    text.addListener(SWT.KeyUp, (e) -> { 
     if (e.stateMask == SWT.CTRL && e.keyCode == 'u') 
     { 
      int currentLine = text.getLineAtOffset(text.getCaretOffset()); 
      String textAtLine = text.getLine(currentLine); 
      int spaces = getLeadingSpaces(textAtLine); 
      text.insert("\n"); 
      text.setCaretOffset(text.getCaretOffset() + 1); 
      for (int i = 0; i < spaces; i++) 
       text.append(" "); 

      text.setCaretOffset(text.getCaretOffset() + spaces); 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    shell.setSize(400, 300); 

    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
} 

private static int getLeadingSpaces(String line) 
{ 
    int counter = 0; 

    char[] chars = line.toCharArray(); 
    for (char c : chars) 
    { 
     if (c == '\t') 
      counter += TAB_WIDTH; 
     else if (c == ' ') 
      counter++; 
     else 
      break; 
    } 

    return counter; 
} 
+0

Evet, aynen ne olduğunu ben yapmak istiyorum. Çok teşekkür ederim. Ben de "" ile doldurmayı düşünüyorum, ama işe yaramadı. Not: Braille ekran için çalışıyorum ve beyaz boşluklar bazen çok iyi değil çünkü braille ekranı aynı anda sınırlı sayıda görüntü karakterine sahip (40 karakter). Ama ben onu yönetmeye çalışacağım. Teşekkürler. – APex

+0

@APex Bunun yerine sekmeleri de kullanabilirsiniz. – Baz

+0

Evet .. Ben de yapmaya çalışıyorum .. Teşekkürler. – APex