اختيار العناصر جزءا لا يتجزأ من JTextPane
المحلول 2
وتثبيت Highlighter
المخصصة في JTextPane
، والتي يمكن أن تثري مكونات جزءا لا يتجزأ عندما تحتاج إلى تسليط الضوء أم لا:
textPane.setHighlighter( new CustomHighlighter() );
// ...
private final class CustomHighlighter extends DefaultHighlighter {
@Override
public Object addHighlight( int p0, int p1, HighlightPainter p ) throws BadLocationException {
Object tag = super.addHighlight(p0, p1, p);
/* notify embedded components ... */
return tag;
}
@Override
public void removeHighlight( Object tag ) {
super.removeHighlight(tag);
/* notify embedded components ... */
}
@Override
public void removeAllHighlights() {
super.removeAllHighlights();
/* notify embedded components ... */
}
@Override
public void changeHighlight( Object tag, int p0, int p1 ) throws BadLocationException {
super.changeHighlight(tag, p0, p1);
/* notify embedded components ... */
}
}
نصائح أخرى
هل يمكن استخدام MouseMotionListener والتعامل مع الحدث mouseDragged. لن تحتاج بعد ذلك إلى استخدام الأسلوب viewToModel () لمعرفة أي جزء من نموذج تم اختياره.
وحسنا فعلت شيئا من هذا القبيل، طويلة طويلة الى الوراء. في الحالات بلدي كانت العناصر جزءا لا يتجزأ من الوجوه الضاحكة في محرر الدردشة. ما عليك فعله هو عندما يحدث اختيار، يمكنك الحصول على علامة ونقطة (e.getMark، e.getDot). إذا يكمن مبتسم بين علامة ونقطة، ثم أنه من المفترض أن يتم تسليط الضوء، لذلك قمت بتعيين حقل في عنصر مبتسم يقول تسليط الضوء عليها، ووضع طلب إعادة رسم. وأخيرا، في طريقة الطلاء (ز) من المكون مبتسم كنت مجرد رسمه على النحو المبين.
لا تنتمي إلى StackOverflow