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

هل يمكن جعل الكتابة في مربع النص أو أي مكون آخر عمودية من أعلى إلى أسفل ؟

بدأه rohaili في 29 مايو 2009 · 4 رد · 810 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه ،،

دائما ما تكون الكتابة في مكونات الجافا أفقية من اليمين لليسار ، فهل يمكن جعلها عمودية من أعلى لأسفل ، أو تدوير المكون بزاوية معينة ؟

300_130.gif

#2

أنت قصدك ما فيش كتابة (كتابة كود) من اليمين إلى اليسار ولا كتابة إية بالضبط؟؟؟؟؟؟؟؟؟

#3

في مستطيل النص jtextfield تكون الكتابة من اليمين لليسار ، أي أن مربع النص أفقي .

وأنا أريد أن يكون مربع النص عمودي ، أي أن الكتابة تظهر فيه من الأعلى للأسفل .

وجزاك الله خيرا على إهتمامك بالموضوع .

300_130.gif

#4

أخي أنا قمت بالرسم بشكل عامودي على JPanel

أتوقع أن تنفع معك لا شيء يمنع من التجربة :lol:

AffineTransform fontAT = new AffineTransform();
		Font theFont = jLabel1.getFont();
		fontAT.rotate(3*Math.PI/2);
		Font theDerivedFont = theFont.deriveFont(fontAT);

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه ،،

أولا :

جزاك الله خيرا أخي علاء الصالحي .

ثانيا : الشرح

أضف الفئة التالية إلى مشروعك ويمكنك التعديل على النص والزاوية كما تشاء .

package rotatetext;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;

public class textrotate extends javax.swing.JPanel {

	public textrotate(){
	}

	@Override
		protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		Graphics2D g2 = (Graphics2D)g;

		//إنشاء كائن من AffineTransform ثم تدويره بزاوية معينة بالراديان
		// ط = 180 درجة = PI
		//سوف يدور النص بزاوية 45 درجة للأعلى بدأ من الصفر بالإتجاه السالب أي عكس عقارب الساعة
		AffineTransform fontAT = new AffineTransform();
		fontAT.rotate(- Math.PI / 4);

		//اجعل الخط المستخدم في g2 نفس الخط السابق مع إضافة تأثير الإمالة الموجود في الكائن fontAT إليه
		g2.setFont(g2.getFont().deriveFont(fontAT));

		//اكتب الآن وسوف يظهر الخط مائلا بزاوية 45 درجة للأعلى
		g2.drawString("تدوير النص", this.getWidth() / 2, this.getHeight() / 2);

		//تحسين جودة الكتابة ويظهر أثرها عند الكتابة بزاوية ليست أفقية أو عمودية
		RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
		g2.setRenderingHints(qualityHints);

		//سوف يدور النص بزاوية 90 درجة بدأ من الزاوية السابقة بالإتجاه الموجب أي مع عقارب الساعة
		fontAT.rotate(Math.PI / 2);
		g2.setFont(g2.getFont().deriveFont(fontAT));
		g2.drawString("تدوير النص", this.getWidth() / 2, this.getHeight() / 2);
	}
}

ثم أنشأ كائن من الفئة السابقة في المكان الذي تريد وأضفه الى المكان الذي تريد مثلا كالتالي :

	mainPanel.setLayout(new java.awt.BorderLayout());
		textrotate tr = new textrotate();
		mainPanel.add(tr);

وهذه صورة النتيجة .

post-63809-1244882588_thumb.jpg

مرفق المشروع كاملا بهيئة netbeans باسم rotatetext.zip

ثالثا : رغم استفادتي الكبيرة من هذه الفئة إلا أنه عند تطبيقها على jtextarea ظهرت الكتابة بالشكل التالي الظاهر في الصورة التالية ،

post-63809-1244882634_thumb.jpg

أضف إلى ذلك أنه عند الكتابة بشكل عمودي تظهر الحروف كلها في مكان واحد فوق بعضها البعض .

وهذه الشيفرة التي استخدمتها :

	AffineTransform fontAT = new AffineTransform();
		fontAT.rotate( Math.PI / 4 );

		JTextArea ta = new JTextArea();

		ta.setFont(ta.getFont().deriveFont(fontAT));
		ta.setText("text area rotate");

		mainPanel.setLayout(new java.awt.BorderLayout());
		mainPanel.add(ta);

مرفق المشروع كاملا بهيئة netbeans باسم textarearotate.zip

rotatetext.zip

textarearotate.zip

300_130.gif

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

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

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

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

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