سؤال

لدي JFrame يحتوي على jtextpane. الغرض من هذه jtextpane هو تسليط الضوء على الكلمات كما أكتبها، وهو شيء على غرار محرر نصي مبرمج. لإنجاز هذا، قمت بمحمد jtextpane، قمت بتنفيذ KeyListener. واجهة، وكان لي الإعداد ك المستمع الرئيسي إلى الذات. الطريقة التي تفعل بعض العمل الهام keyrelomer.. وبعد المشكلة هي، يمكنني تسليط الضوء على الكلمة الأولى التي اكتبتها، ولكن بعد ذلك، أظل الحصول على bredlocation، على الرغم من أن بداية و ال نهاية داخل حدود المستندات. أقوم بنشر بعض مقتطفات التعليمات البرمجية الخاصة بي:


// this is my highlight method
private void highlight(int start,int end) throws BadLocationException {
      Document doc = getDocument();
      Color c = Color.red;
      String text = doc.getText(start,end);
      StyleContext sc = StyleContext.getDefaultStyleContext();
      AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
      setCharacterAttributes(aset, true);
      setSelectionStart(start);
      setSelectionEnd(end);
      replaceSelection(text);
}

//this is my keyReleased method
public void keyReleased(KeyEvent arg0) {
        char character = arg0.getKeyChar();
        if(wordStarted) { // have I started typing a new word ?
            if(character == ' ') { // end word
                try {
                    int dot = getCaret().getDot();
                    highlight(wordStart, dot - 1);
                    setCaretPosition(dot);
                    wordStarted = false;
                } catch (BadLocationException ex) {
                    ex.printStackTrace();
                }
            }
        }
        else {
            if(Character.isLetter(character)) {
                wordStarted = true;
                wordStart = getCaret().getDot() -1;
            }
        }
    }

حاولت كتابة: ثابت العام لكن فقط عامة أحمر ملون. حتى أضافت بعض بيانات Println لتصحيح الأخطاء، وهذا هو الإخراج:

يتم إخراج هذا بعد كتابة البداية العامة PALIAM: 0 End Param: 6 طول الوثيقة: 7 مستند بدء: 0 المستند الوظيفة: 8 نص: الجمهور يتم إخراج هذا بعد كتابة Static Start Param: 7 نهاية Param: 13 طول المستند: 14 بدء تشغيل المستند: 0 الوثيقة نهاية: 15 نص: Static Static Javax.Swing.Text.BadLocationException: موقع غير صالح في Javax.swing.text.gapcontent.getChars (Gapcontent.java: 189) في Javax.swing.text.gapcontent.getstring (Gapcontent.java : 167) في javax.swing.text.abstractdocument.gettext (مجردة التنمير.java:774) في ifirst.visual.codepanel.highlight (Codepanel.java: 49) في IFIRST.VISUAL.CODEPANEL.KEYREALOAD (CODEPANEL.JAVA: 82) at java.awt.component.processkeyevent (component.java:6069) في javax.swing.jcomponent.processkeyevent (jcomponent.java:2810) في java.awt.component.processevent (component.java:5885) في Java.awt. حاوية.ProcessEvent (حاوية.java:2105) في java.awt.component.dispatcheventimpl (component.java:4469) في java.awt.container.dispatcheventimpl (حاوية.java:2163) في java.awt.co mponent.dispatchevent (مكون .java:4295) في java.awt.keyboardfocusmanager.redispatchevent (keyboardfocusmanager.java:1881) في java.awt.defaultkeyboardfocusmanager.dispatchkeyevent (defaultkeyboardfocusmanager.java:742) at java.awt.defaultkeyboardfocusmanager.predispatchkeyevent (defaultkeyboardFocusmanager .java: 1007) في java.awt.defaultkeyboardfocusmanager.typeaheadassertions (defaultkeyboardfocusmanager.java:879) at java.awt.defaultkeyboardfocusmanager.dispatchevent (defaultkeyboardfocusmanager.java:706) في java.awt.component.dispatcheventimpl (component.java:4339) في java.awt.container.dispatcheventimpl (حاوية.java:2163) في java.awt.window.dispatcheventimpl (window.java:2478) في java.awt.component.dispatchevent (مكون .java:4295) في Java.awt. EventQueue.dispatchEvent (EventQueue.java:604) في java.awt.eventdispatchthread.pumponeeventforters (Eventdispatchthread.java:275) في java.awt.eventdispatchthread.pumpeventsforfilter (EventDispatchthread.java:200) at java.awt.eventdispatchthread.p UmpeventSformhierarchy (EventDispatchthread.java:190) في java.awt.eventdispatchthread.pumpevents (EventDispatchthread.java:185) في Java.awt.eventdispatchthread.pumpevents (EventDispatchthread.java:177) at java.awt.eventdispatchthread.run (EventDispatchthread.java : 138)

أكتب هذا الرمز للحصول على تعليق من jtextpane. أنا غير مهتم بشيء مثل jtextpane..

هل كانت مفيدة؟

المحلول

كما اكتشفت،Document.getText () يأخذ بداية و الطول, وليس بداية و نهاية جدال. اعتقدت أنني سأقدم إجابة ورابط إلى Javadoc للآخرين قراءة سؤالك الذين قد لا ينظرون في التعليقات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top