بســم الله الـرحمــن الرحيــم
السلام عليكــم ورحمـة الله وبركاتــه ،،
دائما ما تكون الكتابة في مكونات الجافا أفقية من اليمين لليسار ، فهل يمكن جعلها عمودية من أعلى لأسفل ، أو تدوير المكون بزاوية معينة ؟
بســم الله الـرحمــن الرحيــم
السلام عليكــم ورحمـة الله وبركاتــه ،،
دائما ما تكون الكتابة في مكونات الجافا أفقية من اليمين لليسار ، فهل يمكن جعلها عمودية من أعلى لأسفل ، أو تدوير المكون بزاوية معينة ؟
أنت قصدك ما فيش كتابة (كتابة كود) من اليمين إلى اليسار ولا كتابة إية بالضبط؟؟؟؟؟؟؟؟؟
في مستطيل النص jtextfield تكون الكتابة من اليمين لليسار ، أي أن مربع النص أفقي .
وأنا أريد أن يكون مربع النص عمودي ، أي أن الكتابة تظهر فيه من الأعلى للأسفل .
وجزاك الله خيرا على إهتمامك بالموضوع .
أخي أنا قمت بالرسم بشكل عامودي على JPanel
أتوقع أن تنفع معك لا شيء يمنع من التجربة :lol:
AffineTransform fontAT = new AffineTransform(); Font theFont = jLabel1.getFont(); fontAT.rotate(3*Math.PI/2); Font theDerivedFont = theFont.deriveFont(fontAT);
تحياتي
بســم الله الـرحمــن الرحيــم
السلام عليكــم ورحمـة الله وبركاتــه ،،
أولا :
جزاك الله خيرا أخي علاء الصالحي .
ثانيا : الشرح
أضف الفئة التالية إلى مشروعك ويمكنك التعديل على النص والزاوية كما تشاء .
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);
وهذه صورة النتيجة .
مرفق المشروع كاملا بهيئة netbeans باسم rotatetext.zip
ثالثا : رغم استفادتي الكبيرة من هذه الفئة إلا أنه عند تطبيقها على jtextarea ظهرت الكتابة بالشكل التالي الظاهر في الصورة التالية ،
أضف إلى ذلك أنه عند الكتابة بشكل عمودي تظهر الحروف كلها في مكان واحد فوق بعضها البعض .
وهذه الشيفرة التي استخدمتها :
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
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…