2012-12-08 13 views
5

Jak ustawić szerokość karty JavaFX TextArea?JavaFX TextArea: jak ustawić szerokość tabulacji

Kiedy używam tabulacji (klawisz tabulatora) w obszarze TextArea, szerokość tabulacji jest szeroka. Chcę kontrolować szerokość, tj. Użyć 4 spacji. W dokumentacji nie mogłem znaleźć metody, aby to zrobić.

Próbowałem ten kod (gdzie taInput jest textarea), ale to nie działa tak jak powinien:

taInput.setOnKeyPressed(new EventHandler<KeyEvent>() { 
    @Override 
    public void handle(KeyEvent e) { 
     if (e.getCode() == KeyCode.TAB) { 
      // TAB SPACES 
      StringBuilder sb = new StringBuilder(config.getTabSpacesCount()); 
      for (int i=0; i<config.getTabSpacesCount(); i++) { 
       sb.append(' '); 
      } 
      taInput.insertText(taInput.getCaretPosition(), sb.toString()); 
      e.consume(); 
     } 
    } 
}); 
+1

starałem się rozwiązać podobny problem bez wymiany kart z przestrzeni ... zobacz http://stackoverflow.com/questions/27585668/ ustawienie-tab-odstęp-rozmiar-wizualizacja-dla-a-javafx-textarea/27595205 # 27595205 – Kolban

Odpowiedz

4

Wreszcie znalazłem sposób, aby to zrobić.

Wygląda na to, że metoda setOnKeyPressed() nie jest odpowiednia dla tego zadania, ponieważ zdarzenie jest obsługiwane po wykonaniu akcji keyPress.

AddEventFilter() obsługuje zdarzenia przed wykonaniem ich akcji, dzięki czemu można nimi manipulować.

Mój nowy kod:

taInput.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() { 
    @Override 
    public void handle(KeyEvent e) { 
     if (e.getCode() == KeyCode.TAB) { 
      String s = StringUtils.repeat(' ', config.getTabSpacesCount()); 
      taInput.insertText(taInput.getCaretPosition(), s); 
      e.consume(); 
     } 
    } 
}); 
1

@tenotron

kod wykonuje również samą logikę kombinacji klawisza TAB z zestawem modyfikatorów (Shift, Control, Alt lub meta skrótów). Znaczenie W TextArea

Naciśnięcie klawisza TAB = Ctrl (modyfikator) + TAB = .... = Twoja logika.

Aby rozwiązać ten problem, trzeba użyć KeyCombination

Przykładowy kod:

textArea.addEventFilter(KeyEvent.KEY_PRESSED, 
       new EventHandler<KeyEvent>() { 
        final KeyCombination combo = new KeyCodeCombination(
          KeyCode.TAB); 
      @Override 
        public void handle(KeyEvent event) { 
          // check for only tab key 
         if (combo.match(event)) { 
          textArea.insertText(textArea.getCaretPosition(), 
            "I am not real TAB"); 
          event.consume(); 
       } 
      } 
     }); 

teraz Naciśnięcie klawisza Tab wyniki „Nie jestem rzeczywistym TAB” Ctrl + Tab zaprezentuje kolejny węzeł scena.

referencyjny:

Correctly Checking KeyEvents

KeyCombination

+0

OK, dzięki. Nie potrzebuję tego zachowania teraz, ale dobrze wiedzieć. – ceklock

Powiązane problemy