2012-12-08 10 views
5

मैं JavaFX TextArea की टैब चौड़ाई कैसे सेट करूं?जावाएफएक्स टेक्स्ट एरिया: टैबलेशन चौड़ाई कैसे सेट करें

जब मैं टेक्स्टएरिया में सारणीकरण (टैब कुंजी) का उपयोग करता हूं, तो तालिका की चौड़ाई विस्तृत होती है। मैं चौड़ाई को नियंत्रित करना चाहता हूं, यानी, 4 रिक्त स्थान का उपयोग करें। प्रलेखन में मुझे ऐसा करने का कोई तरीका नहीं मिला।

मैं इस कोड (जहां taInput एक TextArea है) की कोशिश की है, लेकिन यह एकदम सही ढंग से काम नहीं कर रहा:

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

मैं रिक्तियों के साथ टैब बदले बिना एक ऐसी ही समस्या को हल करने की कोशिश की ... देखना http://stackoverflow.com/questions/27585668/ सेटिंग-द-टैब-स्पेसिंग-आकार-विज़ुअलाइज़ेशन-फॉर-ए-जावाफक्स-टेक्स्टारेरा/275 9 5205 # 27595205 – Kolban

उत्तर

4

अंत में मैं यह करने के लिए एक रास्ता मिल गया।

ऐसा लगता है कि setOnKeyPressed() विधि इस कार्य के लिए अच्छा नहीं है क्योंकि कुंजीपटल कार्रवाई निष्पादित होने के बाद ईवेंट को संभाला जाता है।

addEventFilter() घटनाओं को उनके क्रियाओं को निष्पादित करने से पहले संभालता है, ताकि आप घटनाओं में हेरफेर कर सकें।

मेरा नया कोड:

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

अपने कोड भी संशोधक (पाली, नियंत्रण, ऑल्ट, मेटा या शॉर्टकट) के सेट के साथ टैब कुंजी के संयोजन के लिए एक ही तर्क निष्पादित करता है। मतलब टेक्स्टएरिया

टैब कुंजी दबाकर = Ctrl (संशोधक) + टैब = .... = आपका तर्क।

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(); 
       } 
      } 
     }); 

अब दबाने टैब कुंजी परिणाम "मैं रियल टैब नहीं कर रहा हूँ", Ctrl + Tab पर अगले नोड पर प्रकाश डाला जाएगा:

इस समस्या को हल करने के लिए, आप का उपयोग करने के KeyCombination

नमूना कोड है स्थल।

संदर्भ:

Correctly Checking KeyEvents

KeyCombination

+0

ठीक है, धन्यवाद। मुझे अब इस व्यवहार की ज़रूरत नहीं है, लेकिन जानना अच्छा है। – ceklock

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