الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

JTextArea مطور يستطيع تلوين السطر الحالي

بدأه herch في 27 نوفمبر 2009 · 3 رد · 707 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كما يقال، صورة خير من ألف تعليق

post-181903-12593344863342_thumb.png

يمكن استعمال هذا المكون كالتالي

HighlightedTextArea txt = new HighlightedTextArea();

هذا الconstructor يستعمل اللون الأصفر لرسم الhighlight

HighlightedTextArea txt = new HighlightedTextArea(Color.lightgray);

يمكن تغيير لون الhighlight باستعمال هذا constructor، بالطبع يجب تمرير كائن من فئة Color

يمكن إضافة هذا المكون إلى أي حاوي مثل أي مكون swing

HighlightedTextArea txt = new HighlightedTextArea();
JPanel pn = new JPanel();
pn.add(txt);

وهذه شيفرة الكلاس

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTextArea;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import javax.swing.text.Highlighter.HighlightPainter;
import javax.swing.text.JTextComponent;

/**
 *
 * @author herch
 */
public class HighlightedTextArea extends JTextArea {

	private Highlighter lineHighlighter;
	private LineHighlightPainter highlightPainter;
	private Color highlightColor;

	public HighlightedTextArea(Color highlightColor) {
		this.highlightColor = highlightColor;
		lineHighlighter = new DefaultHighlighter();
		highlightPainter = new LineHighlightPainter();
		setHighlighter(lineHighlighter);
		addMouseListener(new MouseAdapter() {

			@Override
			public void mousePressed(MouseEvent e) {
				highlightCurrentLine();
			}
		});
		addCaretListener(new CaretListener() {

			public void caretUpdate(CaretEvent e) {
				if (getCaret().getDot() == getCaret().getMark()) {//if no selection
					highlightCurrentLine();
				}
			}
		});
	}

	public HighlightedTextArea() {
		this(Color.YELLOW);
	}

	private void highlightCurrentLine() {
		try {
			lineHighlighter.removeAllHighlights();//remove all the previous highlights int the textarea
			lineHighlighter.addHighlight(getCaretPosition(), 0, highlightPainter);//we set the highlight on the current line
		} catch (BadLocationException ex) {
			ex.printStackTrace();
		}
	}

	class LineHighlightPainter implements HighlightPainter {

		public void paint(Graphics g, int p0, int p1, Shape bounds, JTextComponent c) {

			JTextArea t = (JTextArea) c;
			try {
				Rectangle r = t.modelToView(p0);//Converts the location in the model(text) to a place in the view coordinate system
				g.setColor(highlightColor);
				g.fillRect(0, r.y, t.getWidth(), r.height);
			} catch (BadLocationException ex) {
				ex.printStackTrace();
			}
		}
	}
}

HighlightedTextArea.java.zip

تم تعديل هذه المشاركة بواسطة herch في 27 نوفمبر 2009 في 18:20

2
#2

رائع اخي العزيز ،،

أحييك على هذا العمل بالتوفيق عزيزي

Linux for human beings

#3
Dev:MOH-TAHA كتب:

رائع اخي العزيز ،،

أحييك على هذا العمل بالتوفيق عزيزي

أهلا بك، وشكرا على مرورك :)

#4

السلام عليكم

مشكور أخى عصام على هذا المجهود الجميل

تقبل مرورى


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…