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

التعامل مع ال Graphics

بدأه mr.beshoy في 12 أغسطس 2009 · 31 رد · 1,927 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

شكل علاء تضايق

فا هنعزل الموضوع

#27

لم أتضايق يا بيشوي

كل ما هناك أني أحاول المحافظة على وحدة الموضوع

لكي يتمكن الآخرون بعد مضي الوقت من الاسفتادة منه بشكل جيد

تحياتي

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

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

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

728x90.png

#28

هنا فى هذه المرة بحاول نعمل أنواع من الخطوط لها أحجام مختلفة ...

الكود منطقه كويس لكن فى عيب مش مكتشفه

أنا الخط الرفيع بيرسم زى الخط السميك ( المفروض الرفيع حجمه 1 و السميك درجة اكبر شوية حجمه 5 )) للإسف الإثنين بيرسموا حجم 1

ادى الشفيرة المختصة بهيك العملية :-

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

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JFrame {

	private JButton lineButton = new JButton("line");
	private JButton[] buttons;
	private ImageIcon[] imageIcons;
	private String[] imageNames = {"line1.jpg", "line2.jpg", "line3.jpg", "line4.jpg", "line5.jpg"};
	private JPanel panel, mainPanel, lineTypesPanel;
	private ShapeTest drawPanel;

	public Test() {

		mainPanel = new JPanel(new BorderLayout());

		drawPanel = new ShapeTest();
		drawPanel.setShapeTypes(ShapeTypes.LINE);

		panel = new JPanel();
		panel.setPreferredSize(new Dimension(200, 300));
		panel.setBackground(Color.BLUE);

		lineTypesPanel = new JPanel(new GridLayout(5, 1));
		lineTypesPanel.setPreferredSize(new Dimension(100, 200));

		imageIcons = new ImageIcon[imageNames.length];
		for (int i = 0; i < imageNames.length; ++i) {
			imageIcons = new ImageIcon(getClass().getResource(imageNames));
		}

		MyActionListener myActionListener = new MyActionListener();
		lineButton.addActionListener(myActionListener);

		buttons = new JButton[imageNames.length];
		for (int i = 0; i < imageNames.length; ++i) {
			buttons = new JButton(imageIcons);
			buttons.addActionListener(myActionListener);
			lineTypesPanel.add(buttons);
		}
		panel.add(lineTypesPanel);
		lineTypesPanel.setVisible(false);


		mainPanel.add(lineButton, BorderLayout.NORTH);
		mainPanel.add(drawPanel, BorderLayout.CENTER);
		mainPanel.add(panel, BorderLayout.WEST);

		getContentPane().add(mainPanel);

	}

	public static void main(String[] args) {
		Test test = new Test();
		test.setDefaultCloseOperation(Test.EXIT_ON_CLOSE);
		test.setSize(new Dimension(600, 300));
		test.setLocationRelativeTo(null);
		test.setVisible(true);
		test.setExtendedState(MAXIMIZED_BOTH);
	}

	public class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == lineButton) {
				lineTypesPanel.setVisible(true);
			}
			if (e.getSource() == buttons[0]) {
				drawPanel.setStroke(new BasicStroke(1));
				drawPanel.setShapeTypes(ShapeTypes.LINE);
			}
			if (e.getSource() == buttons[1]) {
				drawPanel.setStroke(new BasicStroke(5));
				drawPanel.setShapeTypes(ShapeTypes.LINE);
			}

		}
	}
}

الكلاس ال فيه اللعب كله : lol:

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

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;

class ShapeTest extends JPanel {

	private ShapeTypes shapeTypes;
	private Point xStart, yStart, xEnd, yEnd;
	private Stroke stroke;
	private List<Shape> shapelist = new ArrayList<Shape>();

	public ShapeTest() {
		MyMouse myMouse = new MyMouse();
		addMouseListener(myMouse);
		addMouseMotionListener(myMouse);

		xStart = new Point();
		yStart = new Point();
		xEnd = new Point();
		yEnd = new Point();
	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		for (Shape shape : shapelist) {
			g2.draw(shape);
		}
		switch (shapeTypes) {
			case LINE:
				Line2D line2D1 = new Line2D.Double(xStart.x, yStart.y, xEnd.x, yEnd.y);
				shapelist.add(line2D1);
				break;
		}

	}

	class MyMouse extends MouseAdapter {

		@Override
		public void mousePressed(MouseEvent e) {
			xStart = e.getPoint();
			yStart = e.getPoint();
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			xEnd = e.getPoint();
			yEnd = e.getPoint();
			repaint();
		}
	}

	public ShapeTypes getShapeTypes() {
		return shapeTypes;
	}

	public void setShapeTypes(ShapeTypes shapeTypes) {
		this.shapeTypes = shapeTypes;
	}

	public Stroke getStroke() {
		return stroke;
	}

	public void setStroke(Stroke stroke) {
		this.stroke = stroke;
	}
}

الشى الجديد فى الكلاس ده : الدوال set & get for strock و تم عمل call لهم فى الكلاس الأول فى الدالة actionPerformed

ال Enum

---------

public enum ShapeTypes {
	LINE;
}

عاوز اعرف انا مستعمل ال set & get الخاصة بال strocj غلط و لا ايه ؟؟

شكراً

#29

بيشوي راجع المشاريع الي تعملت قبل كده كرسام

لأنك بتسأل أسئلة مكررة

تحياتي

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

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

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

728x90.png

#30

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

بمعنى الكود التانى ده 20 مليون سطر و class (( كناية عن كبره مش أكثر )) فا بتوه جواه

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

فأنا هنا لما بواجه مشكلة بعرض الجزء الخاص بالمشكلة فقط مش أكثر .

أنا عارف انا هنا فى كام مشروع paint وشغلتهم بس من سابع مستحيل اتعلم شئ منهم على الرغم من قوتهم ... أنا بعرف اتعلم من خلال تفكيرى و لو مواجه مشكلة بعرضها و من خلال النقاش بعرف الحل و من هنا بكون استفدت ....

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

و استفادتى من كود الآخر بتكمن عندما ارى فكرته المتعلقة بالمشكلة التى تواجهنى ... يعنى انا مواجه مشكلة و عرضت فكرتى و جيت انت قولت لا الصح كده فى الحالة دى انا بعرف

استفاد من كود غيرى لاننا بنتناقش فى جزئية معينة خلاف لما أبص فى كود مكون من 100 مليون class و سطر :lol:

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

عموماً عادى ياعم علاء ... أنا هحاول تانى بس لو موصلتش لشئ مليش دعوة هتساعدنى يعنى هتساعدنى ... :lol:

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

سلام

#31

أنا ممكن أتهمك أنك لا تقرأ أبداً وأقوم بحذف بإغلاق هذا الموضوع

بس ما تهونش عليه يا معلم

بس على فكرة هتستفيد كثير لو نميت عندك موهبة قراءة الشيفرة الخاصة بالآخرين

g2d.setStroke(new BasicStroke(2.1f));

تحياتي

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

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

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

728x90.png

#32

رجعت تانى :lol: يا علاء هههههههه معلش ما حصل انتهى :lol:

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

اشكر الإخوة المبرمجين على تعاونهم أخ علاء على تحمله لإسئلتى الغبية و على تلميحته البسيطة لأستعمل ال setStrok :lol: ...

و أخ عصام على تصحيحه لفكرة خطأ كنت اتبعها و لكن هو الذى قال لى الصواب (( أقول ذاك للإمانة العلمية و تقدير تعب الآخريين ))

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

هناك محاولات فعلتها و لكن منها ما فشل فشلاً كلياً و منها ما نفع بنسبة 70 فى المية من الآخر محاولاتى مل تعطينى ما أريد و لكنها عادت بالفائدة حيث تعرفت على الأخطاء

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

الكود الصحيح :

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

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainPainter {

	private static final Dimension App_Dimension = new Dimension(600, 300);
	private JPanel mainPanel, mainComponentPanel, componentPanel, lineTypesPanel;
	private String[] buttonNames = {"line", "rect", "oval", "polygon", "eraser"};
	private JButton[] buttons, linesTypeButton;
	private String[] imageNames = {"line.png", "rect.png", "oval.png", "connected.png", "erase.png"};
	private String[] imageLineNames = {"line1.jpg", "line2.jpg", "line3.jpg", "line4.jpg", "line5.jpg"};
	private ImageIcon[] imageIcons;
	private ImageIcon[] imageLineIcons;
	private ShapetTest drawPanel;

	public MainPainter() {
		intializePanels();
		intializeButtons();
		intializationIcons();
		new ShapetTest();

	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.getContentPane().add(new MainPainter().getComponent());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(App_Dimension);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
	}

	private void intializePanels() {

		mainPanel = new JPanel(new BorderLayout());

		mainComponentPanel = new JPanel();
		mainComponentPanel.setLayout(null);
		mainComponentPanel.setBackground(Color.BLUE);
		mainComponentPanel.setPreferredSize(new Dimension(200, 100));

		componentPanel = new JPanel(new GridLayout(3, 2));
		componentPanel.setBackground(Color.GREEN);
		componentPanel.setBounds(30, 50, 150, 100);

		drawPanel = new ShapetTest();
		drawPanel.drawPanelColor();

		lineTypesPanel = new JPanel();
		lineTypesPanel = new JPanel(new GridLayout(5, 1));
		lineTypesPanel.setBorder(BorderFactory.createEtchedBorder());
		lineTypesPanel.setBounds(30, 300, 100, 100);
		mainComponentPanel.add(lineTypesPanel);
		lineTypesPanel.setVisible(false);

		mainPanel.add(drawPanel, BorderLayout.CENTER);
	}

	private void intializationIcons() {
		imageIcons = new ImageIcon[imageNames.length];
		for (int i = 0; i < imageNames.length; ++i) {
			imageIcons = new ImageIcon(getClass().getResource(imageNames));
		}

		imageLineIcons = new ImageIcon[imageLineNames.length];
		for (int i = 0; i < imageLineNames.length; ++i) {
			imageLineIcons = new ImageIcon(getClass().getResource(imageLineNames));
		}
	}

	private void intializeButtons() {
		intializationIcons();
		MyActionListener myActionListener = new MyActionListener();
		buttons = new JButton[buttonNames.length];
		for (int i = 0; i < buttonNames.length; ++i) {
			buttons = new JButton(imageIcons);
			buttons.setToolTipText(buttonNames);
			buttons.addActionListener(myActionListener);
			componentPanel.add(buttons);
			mainComponentPanel.add(componentPanel);
		}

		linesTypeButton = new JButton[imageLineNames.length];
		for (int i = 0; i < imageLineNames.length; ++i) {
			linesTypeButton = new JButton(imageLineIcons);
			linesTypeButton.addActionListener(myActionListener);
			lineTypesPanel.add(linesTypeButton);
		}

		mainPanel.add(mainComponentPanel, BorderLayout.WEST);
	}

	public JComponent getComponent() {
		return mainPanel;

	}

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == buttons[0]) {
				lineTypesPanel.setVisible(true);
			}
			if (e.getSource() == linesTypeButton[0]) {
				drawPanel.setCurrentStroke(drawPanel.strokes[0]);
			}
			if (e.getSource() == linesTypeButton[1]) {
				drawPanel.setCurrentStroke(drawPanel.strokes[1]);
			}
			if (e.getSource() == linesTypeButton[2]) {
				drawPanel.setCurrentStroke(drawPanel.strokes[2]);
			}
			if (e.getSource() == linesTypeButton[3]) {
				drawPanel.setCurrentStroke(drawPanel.strokes[3]);
			}
			if (e.getSource() == linesTypeButton[4]) {
				drawPanel.setCurrentStroke(drawPanel.strokes[4]);
			}
		}
	}
}

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;

class ShapetTest extends JPanel {

	private Point xStart, yStart, xEnd, yEnd;
	private List<Shape> shapesList = new ArrayList<Shape>();
	Stroke[] strokes = new Stroke[]{
		new BasicStroke(1.0f),
		new BasicStroke(5.0f),
		new BasicStroke(10.0f),
		new BasicStroke(15.0f),
		new BasicStroke(15.0f)
	};
	private Stroke currentStroke;

	public ShapetTest() {
		MyMouse mouse = new MyMouse();
		addMouseListener(mouse);
		addMouseMotionListener(mouse);
		drawPanelColor();
		intializePoints();
	}

	private void intializePoints() {
		xStart = new Point();
		yStart = new Point();
		xEnd = new Point();
		yEnd = new Point();
	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setColor(Color.BLACK);
		for (Shape shape : shapesList) {
			if (shape instanceof MyLine) {
				MyLine myLine = (MyLine) shape;
				g2.setStroke(myLine.getLineStroke());
				g2.draw(myLine);
			}
		}
	}

	void drawPanelColor() {
		setBackground(Color.GREEN);
	}

	public class MyMouse extends MouseAdapter {

		@Override
		public void mousePressed(MouseEvent e) {
			xStart = e.getPoint();
			yStart = e.getPoint();
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			xEnd = e.getPoint();
			yEnd = e.getPoint();
			MyLine line2D = new MyLine(xStart.x, yStart.y, xEnd.x, yEnd.y, currentStroke);
			shapesList.add(line2D);
			repaint();
		}
	}

	public Stroke getCurrentStroke() {
		return currentStroke;
	}

	public void setCurrentStroke(Stroke currentStroke) {
		this.currentStroke = currentStroke;
	}
}

import java.awt.Stroke;
import java.awt.geom.Line2D;

public class MyLine extends Line2D.Double {

	private Stroke lineStroke;
	public MyLine(int x1, int y1, int x2, int y2, Stroke stroke) {
		super(x1,y1,x2,y2);
		lineStroke = stroke;
	}

	public Stroke getLineStroke() {
		return lineStroke;
	}

	public void setLineStroke(Stroke lineStroke) {
		this.lineStroke = lineStroke;
	}

}

عشان خاطر علاء نضع الشفيرة فى المرفقات .... :lol:

شكرا

بيشوى عاطف

PaintTester.rar

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

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

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

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

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