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

برنامج ال Word مبسط

رائج
بدأه mr.beshoy في 25 يونيو 2009 · 183 رد · 9,034 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#126

المشلكة في JTable أنك لا تستطيع أن تتحكم بها

فلا تستطيع كتابة ما تشاء فيه

جرب الشيفرة التي وضعتها لك

ستعرف ما الذي أتكلم عنه

تحياتي

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

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

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

728x90.png

#127

جربتها حقاً و لا أستطيع الكتابة على الإطلاق .... فما سبب هذا ؟؟

لما مش هنستعمل ال JTable

نستعمل ايه طيب ؟؟؟؟

قول لنا فكرتك ...

شكرا

#128

يا جماعة أنا الى توصلت له اننا نستعمل ال HTmlEditorKit

فى مثل هذا الأمر

و لكن الأفكار ملغبطة معايا

ياريت تساعدونى فيها

و هذا اللينك المتعلق بال HtmlEditorKit

http://coding.derkeiler.com/Archive/Java/c...5/msg00104.html

#129

مثال


import java.awt.event.*;
import java.awt.*;
import javax.swing.text.*;
import java.io.*;

public class TestJEditorPane {
public static void main(String[] args) {
final JEditorPane txt = new JEditorPane();
txt.setContentType("text/html");
JScrollPane scroll = new JScrollPane(txt);
JFrame frm = new JFrame();
frm.add(scroll);

JButton table = new JButton("table");
table.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
txt.setText("<table border=1><tr><td>zaza</td><td>rara</td></tr><tr><td>fafa</td><td>vava</td></tr></table>
");
txt.requestFocusInWindow();
}
});
frm.setSize(400, 400);
JPanel pn = new JPanel();
pn.add(table);
frm.add(pn, BorderLayout.SOUTH);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
import javax.swing.*;

تم تعديل هذه المشاركة بواسطة herch في 5 أغسطس 2009 في 22:41

#130

سأراه و شكراً جزيلاً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 6 أغسطس 2009 في 00:11

#131

انت فى الكود باضيف ال string

لل EditorPane

فلا يظهر شكل ال table

فما الحل ؟؟؟

اعتقد يجب استعممل HtmlEditorKit

حاولت استعملها لكن لم أفلح إلى الآن

فكيف

؟؟؟

شكرا

#132

هذا المثال السابق مع بعض التعديلات

وهذه صورة البرنامج والجدول يظهر بشكل جيد

imgboc.png


import java.awt.event.*;
import java.awt.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.io.*;

public class TestJEditorPane {
public static void main(String[] args) {
final JEditorPane txt = new JEditorPane();
txt.setContentType("text/html");
JScrollPane scroll = new JScrollPane(txt);
final HTMLEditorKit editorKit = new HTMLEditorKit();
txt.setEditorKit(editorKit);
JFrame frm = new JFrame();
frm.add(scroll);
JButton left = new JButton(new HTMLEditorKit.AlignmentAction("left", StyleConstants.ALIGN_LEFT));
JButton right = new JButton(new HTMLEditorKit.AlignmentAction("right", StyleConstants.ALIGN_RIGHT));
JButton center = new JButton(new HTMLEditorKit.AlignmentAction("center", StyleConstants.ALIGN_CENTER));
JButton bold = new JButton(new HTMLEditorKit.BoldAction());
JButton italic = new JButton(new HTMLEditorKit.ItalicAction());
JButton underline = new JButton(new HTMLEditorKit.UnderlineAction());

JButton table = new JButton("table");
table.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try {
editorKit.read(new StringReader("<table border=1><tr><td>Column1 row1</td><td>Column2 row1</td></tr><tr><td>Column1 row2</td><td>Column2 row2</td></tr></table><br>"), txt.getDocument(), txt.getCaretPosition());
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (BadLocationException be) {
be.printStackTrace();
}
txt.requestFocusInWindow();
}
});
frm.setSize(650, 400);
JPanel pn = new JPanel();
pn.add(left);
pn.add(center);
pn.add(right);
pn.add(bold);
pn.add(italic);
pn.add(underline);
pn.add(table);
frm.add(pn, BorderLayout.SOUTH);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
import javax.swing.*;

#133

أنا من وجهة نظري , هي استخدام JTextPane أو EditorPane , بحيث يتم رسم الجدول باستخدام أدوات الرسم , ليس إضافة JTable أو حتى استخدام HtmlEditorKit , كما يفعل الإخوة , لانه ليست هذه الطريقة العملية ,, لكن أيضا عملية رسم الجدول تتطلب الكثير من الأمور التي يجب انجازها لياحكي الجدول الذي يتم إدراجه في برنامج MS-WORD .

كود بسيط يوضح طريقة رسم الجدول داخل JTextPane :

231839315.jpg

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JTextPane;
public class drawing extends JTextPane{
	int r,c;
	boolean canDraw = false;
	public drawing(){
		setBackground(Color.WHITE);
	}
	public void paintComponent(Graphics g){
		super.paintComponent(g);

		if( canDraw ){
			g.drawRect(30, 30, 400, 200);
			int yDist = 200 / r;
			int xDist = 400 / c;

			System.out.println(yDist);
			System.out.println(xDist);
			for(int i = 1; i < r; i++)
				g.drawLine(30, 30+(yDist*i), 430, 30+(yDist*i));

			for(int i = 1; i < c; i++)
				g.drawLine(30+(xDist*i), 30, 30+(xDist*i), 230);
		}
	}
	public void drawTable(int r, int c){
		this.r = r;
		this.c = c;
	}
}

-------------------------------------------------------------------------------------------

public class TableDrawer extends javax.swing.JFrame {
	drawing dr;
	public TableDrawer() {
		dr = new drawing();
		initComponents();
	}
	@SuppressWarnings("unchecked")
	// <editor-fold defaultstate="collapsed" desc="Generated Code">						  
	private void initComponents() {

		jPanel1 = new javax.swing.JPanel();
		jSpinner1 = new javax.swing.JSpinner();
		jSpinner2 = new javax.swing.JSpinner();
		jLabel1 = new javax.swing.JLabel();
		jLabel2 = new javax.swing.JLabel();
		jButton1 = new javax.swing.JButton();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

		jPanel1.setLayout(new java.awt.BorderLayout());
		jPanel1.add(dr);

		jSpinner1.setValue(1);

		jSpinner2.setValue(1);

		jLabel1.setText("Rows");

		jLabel2.setText("Columns");

		jButton1.setText("Draw Table");
		jButton1.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				jButton1ActionPerformed(evt);
			}
		});

		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
					.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 517, Short.MAX_VALUE)
					.addGroup(layout.createSequentialGroup()
						.addComponent(jLabel1)
						.addGap(9, 9, 9)
						.addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
						.addComponent(jLabel2)
						.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
						.addComponent(jSpinner2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
						.addGap(18, 18, 18)
						.addComponent(jButton1)))
				.addContainerGap())
		);
		layout.setVerticalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(layout.createSequentialGroup()
				.addContainerGap()
				.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
					.addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
					.addComponent(jLabel1)
					.addComponent(jLabel2)
					.addComponent(jSpinner2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
					.addComponent(jButton1))
				.addGap(18, 18, 18)
				.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 334, Short.MAX_VALUE)
				.addContainerGap())
		);

		pack();
	}// </editor-fold>						

	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {										 
		int rows = (Integer)jSpinner1.getValue();
		int columns = (Integer)jSpinner2.getValue();
		if( rows != 0 && columns != 0 ){
			dr.drawTable(rows, columns);
			dr.canDraw = true;
			dr.repaint();
		}
	}										

	public static void main(String args[]) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new TableDrawer().setVisible(true);
			}
		});
	}
	// Variables declaration - do not modify					 
	private javax.swing.JButton jButton1;
	private javax.swing.JLabel jLabel1;
	private javax.swing.JLabel jLabel2;
	private javax.swing.JPanel jPanel1;
	private javax.swing.JSpinner jSpinner1;
	private javax.swing.JSpinner jSpinner2;
	// End of variables declaration				   
}
#134

المشكل في كيفية إضافة النص، وتغيير خصائصه، لأن رسم الجدول بحد ذاته سهل، لكن لكتابة النص فضروري من استعمال أحد مكونات swing النصية، سواء JTextArea أو JTextPane أو JEditorPane، لأنها مثالية ومخصصة لهذا الغرض حسب وجهة نظري

تم تعديل هذه المشاركة بواسطة herch في 6 أغسطس 2009 في 00:26

#135

أعتقد أفضل طريقة ممكنة لهذه العملية

هي استخدام JPanel موضوع عليها JTextField بعدد الخلايا لهذا الجدول

بهذا نضمن أكبر تحكمية ممكنة

ما رأيكم؟؟؟؟

تحياتي

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

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

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

728x90.png

#136

سوف نعود حالاً لمناقشة فكرة محمد و علاء ولكن فى مشكلة هنا نحلها فى الأول :

بالنسبة لل font بأنواعه كنا أيان ال JTextPane

نفعل هذا :

	if (e.getSource() == buttons[6]) {
		   area.setFont(area.getFont().deriveFont(Font.ITALIC));

		}

عاوزين نعدلها طبقاً لل JEditorPane

أنا قولت نفعل ذلك :

if (e.getSource() == buttons[6]) {
			//	area.setFont(area.getFont().deriveFont(Font.ITALIC));
					editorPane.setEditorKit(HTMLEditorKit.ITALIC_ACTION.toString());
		}

و لكن كما ترون أنها خطأ

فكرت فى ذاك( السطر الأخير ) :

if (e.getSource() == buttons[6]) {
			//	area.setFont(area.getFont().deriveFont(Font.ITALIC));
			//		  editorPane.setEditorKit(HTMLEditorKit.ITALIC_ACTION.toString());
			editorPane.setFont(Integer.parseInt(HTMLEditorKit.BOLD_ACTION));
		}

و لكن خطأ أيضاً

ما الصحيح ؟؟ :lol:

#137

JButton italic = new JButton(new HTMLEditorKit.ItalicAction());
JButton underline = new JButton(new HTMLEditorKit.UnderlineAction());
JButton bold = new JButton(new HTMLEditorKit.BoldAction());

هذا كان في المثال السابق

#138

يا جماعة أعتقد أن الاعتماد على لغة HTML سيكون خيار سيء جداً

لأننا سنكون محدودين بإمكانية هذه اللغة

تحياتي

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

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

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

728x90.png

#139

يا عصام الطريقة الى انت عاملها دى مش هتعمل اكشن على الbutton

أنك لما تتضغط يحصل ما تريده

يعنى عاوز تقول فى جملة ال if هذه :

if (e.getSource() == buttons[6])

نكتب بداخلها

button[6]=new JButton(new HTMLEditorKit.ItalicAction())

ما أحنا عملنا intialization قبل كده هنعمله تانى؟؟!!!

غير كده انت كده مش ضايف تاثير الزرار على النص المكتوب فى ال editorPane

معلش استحمل اسئلتى يا عصام

-----------------------------

يا علاء ادينا بنجرب و هنعدل و هنعمل كل ما يخطر ببالنا - لا :lol:تقلق

استحملنى بردو

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 6 أغسطس 2009 في 17:04

#140

هل قرأت وجربت أولا المثال الذي وضعته في الأعلى؟؟

لا داعي أصلا لعمل if، يكفي أن تحدد الAction الذي تريده عند الinitialisation للزر والHTMLEditorKit هو يقوم بالباقي

يعني غير الinitialisation الخاص بالأزرار وأزل الif الخاص بأزرار الalignment و الbold & italic & underline

#141

على كده أحذف ال ActionListener

من على ال Buttons

???

#142

نعم، لأنك أصلا ستمرر لهم كلاس يرث من ActionListener

لو كنت قرأت توثيق الكلاس BoldAction و ItalicAction و UnderlineAction و AlignmentAction لوجدتها تقوم بimplement للinterface ActionListener

#143

شوف ياعم :

أنا شايف انك بتعمل هيك

new HtmlEditorKit().BoldAction();

انا مش لاقى الدالة هذه

و أدى مثال بسيط

import java.awt.BorderLayout;
 import javax.swing.JButton;
 import javax.swing.JEditorPane;
 import javax.swing.JFrame;
 import javax.swing.JScrollPane;
 import javax.swing.text.html.HTMLEditorKit;

 public class HtmlButtonTest extends JFrame {
	 private JEditorPane editorPane;
	 private JScrollPane scrollPane;
	 private HTMLEditorKit editorKit;
	 private JButton boldBotton;
	 public HtmlButtonTest() {
		 editorKit=new HTMLEditorKit();
		 editorPane=new JEditorPane();
		 editorPane.setEditorKit(editorKit);
		 scrollPane=new JScrollPane(editorPane);
		 boldBotton=new JButton(HTMLEditorKit.BOLD_ACTION);

		 getContentPane().add(boldBotton,BorderLayout.NORTH);
		 getContentPane().add(scrollPane,BorderLayout.CENTER);
	 }

	 public static void main(String[] args) {
		 HtmlButtonTest fram = new HtmlButtonTest();
		 fram.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		 fram.setSize(600, 300);
		 fram.setLocationRelativeTo(null);
		 fram.setVisible(true);
	 }
 }

هتلاحظ انه

new HtmlEditorKit().Bold_action;

ده String

ايه المشكلة عندى

؟

تم تعديل هذه المشاركة بواسطة mr.beshoy في 6 أغسطس 2009 في 17:53

#144

يا أخي من فضلك إقرأ ردودي جيدا، وإقرا المثال الكامل الذي أعطيته سابقا

أنا في المثال إستعملت

new HTMLEditorKit.BoldAction()

وليس

new HTMLEditorKit().BoldAction()

شفت الفرق

BoldAction هي كلاس داخل الكلاس HTMLEditorKit، يعني inner class، وليس دالة، ولم أكن أيضا أقصد BOLD_ACTION الذي هو String

#145

الصراحة أن مش عارف ايه التوهان الى انا فيه ده ....أخباك صحتك ايه لغاية دلووقتى ؟؟؟

لم يحدث لك شئ منى ؟؟؟ :lol:

استحمل و خد نفس طويل لسة الباقى أطول من الى راح ههههههههه

طب سوال بسيط أزاى هنا الخط بيفعل تأثيرة على طول

من غير حتى ما بنعمل editorPane.setText(new Font() )

ده الى أنا مستغربله

شكرا لتعبك يا عم عصام

سلام

#146

لأن كل تلك الكلاسات ترث من AbstractAction التي هي بدورها تقوم بimplement لActionListener وتقوم بإعادة كتابة الميثود actionPerformed

وهذه الكلاس حينما تمررها لJButton فإنك كلما ضغطت على الزر يقوم بتنفيذ الكود الذي بداخل الميثود actionPerformed

وبالطبع الكود الموجود داخل الميثود يختلف من كلاس لأخرى، فالذي يوجد داخل BoldAction ليس نفس الكود الموجود في ItalicAction

مزيد من الشرح

#147

اسمحلى اعرض بعض من أفكارى العبيطة شوية :lol:

حضرتك أنا مش هقعد أكتب السطر ده

boldBotton=new JButton(new HTMLEditorKit.BoldAction());

لكذا زرار

فقررنا نعمل مصفوفات باسمهم و مصفوفة من HtmlEditorKit

كما ترى هنا

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.text.html.HTMLEditorKit;

public class HtmlButtonTest extends JFrame {
	private JEditorPane editorPane;
	private JScrollPane scrollPane;

//	private HTMLEditorKit[] hTMLEditorKits={HTMLEditorKit.BoldAction(),HTMLEditorKit.ItalicAction(),HTMLEditorKit};
	private HTMLEditorKit editorKit;

	private String[]buttonsName={"bold","italic"};
	private JButton[]buttons;


	public HtmlButtonTest() {
		editorKit=new HTMLEditorKit();
		editorPane=new JEditorPane();
		editorPane.setEditorKit(editorKit);
		scrollPane=new JScrollPane(editorPane);
		buttons=new JButton[buttons.length];
		for(int i=0;i<buttonsName.length;++i){
			buttons=new JButton(buttonsName);
//			buttons=new JButton(hTMLEditorKits);
		}

	}

	public static void main(String[] args) {
		HtmlButtonTest fram = new HtmlButtonTest();
		fram.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fram.setSize(600, 300);
		fram.setLocationRelativeTo(null);
		fram.setVisible(true);
	}
}

طبعاً الى أمامه comment

هو السطر التالف

شكرا

#148

أولا وضع الأزرار في مصفوفة سيصعب الأمر بالنسبة للذي يريد قراءة الكود الذي كتبته، لأنه لما يجد buttons[1] مثلا، كيف سيعرف لم يصلح هذا الزر؟

أنا أفضل أن تكتب كل زر باسمه، وتعطيهم أسماء معبرة، مثلا btnBold, btnItalic ...

ثانيا، هذا السطر غلط

private HTMLEditorKit[] hTMLEditorKits={HTMLEditorKit.BoldAction(),HTMLEditorKit.ItalicAction(),HTMLEditorKit};

لأنك تنشئ مصفوفة من صنف HTMLEditorKit، بينما BoldAction & ItalicAction & UnderlineAction & ****Action ليست من هذا الصنف، بل كل واحدة هي كلاس بحد ذاتها، يعني صنف مستقل، إذا كنت تريد أن تجمعهم في مصفوفة، فيجب أن تكون من صنف هم كلهم يرثون منه، وبالتالي يمكن تستعمل AbstractAction وهو نفس الصنف الصنف الذي ينتظره الconstructor الخاص بJButton، يعني

private AbstractAction[] actions = {new HTMLEditorKit.BoldAction(), new  *******}

ولكني أفضل أن تضع لكل JButton متغير خاص به دون استعمال مصفوفة

تم تعديل هذه المشاركة بواسطة herch في 6 أغسطس 2009 في 19:04

#149

شوف يا عم

عندك كده :

 private String[] imageName = {"new", "open", "save", "copy", "paste", "Bold", "Italic", "underLine", "Color", "Left", "Center", "Right", "Align"};
	private AbstractAction[] action = {new HTMLEditorKit.BoldAction(),
		new HTMLEditorKit.ItalicAction(),
		new HTMLEditorKit.UnderlineAction()};

فى الدالة هذه كنا بواسطتها بنضع ال buttons على ال bar

و بنعمل action على الbuttons

لغينا الأكشن و وضعنا ال Loop كما سترى

بيعطينى :

Exception in thread "main" java.lang.NumberFormatException: For input string: "Bold"

	private void intializeIcons() {
		barIcon = new JMenuBar();
		buttons = new JButton[images.length];
		imagicons = new ImageIcon[images.length];
		for (int i = 0; i < images.length; ++i) {
			imagicons = new ImageIcon(getClass().getResource(images));
			buttons = new JButton();
			buttons.setIcon(imagicons);
			buttons.setToolTipText(imageName);
			//	buttons.addActionListener(this);
			barIcon.add(buttons);
		}
		for (int i = Integer.parseInt(imageName[5]); i < Integer.parseInt(imageName[8]); ++i) {
			buttons = new JButton(action);
		}
		getContentPane().add(barIcon, BorderLayout.NORTH);
	}

الحلقة التكرارية مخصصة ل 3 button فقط هما ال bold -italic-underline أرقامهم فى المصفوفة 5-6-7

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 6 أغسطس 2009 في 20:35

#150

ممكن تشرح ماذا يعني هذا السطر

Integer.parseInt(imageName[5])

مع العلم أن imageName[5] = bold و Integer.parseInt يفترض أن تقوم بتحويل String يحتوي على عدد إلى int

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

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

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

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

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