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

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

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

هنا كنت أحاول أن أثظهر line على Panel

و لكنه لا يظهر

حاولت فيه كثيراً ولكن دون جدوى

هذا الكود الذى عملته :

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

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
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, drawPanel;
	private String[] buttonNames = {"line", "rect", "oval", "polygon", "eraser"};
	private JButton[] buttons;
	private String[] imageNames = {"line.png", "rect.png", "oval.png", "connected.png", "erase.png"};
	private ImageIcon[] imageIcons;

	public MainPainter() {
		intializePanels();
		intializeButtons();
		intializationIcons();
		ShapetTest shapetTest = 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.setBackground(Color.BLUE);
		mainComponentPanel.setPreferredSize(new Dimension(200, 100));
		componentPanel = new JPanel(new GridLayout(3, 2, 5, 5));
		componentPanel.setBackground(Color.GREEN);
		//drawPanel = new JPanel();

	}

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

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

	public JComponent getComponent() {
		return mainPanel;
	}

	class ShapetTest {

		private int xStart, yStart, xEnd, yEnd;

		public ShapetTest() {
			MyMouse mouse = new MyMouse();
			drawLine();
			drawPanel.addMouseListener(mouse);
			drawPanel.addMouseMotionListener(mouse);
		}

		public void drawLine() {
			//	 new MainPainter().intializePanels();
			drawPanel = new JPanel() {

				@Override
				public void paintComponent(Graphics g) {
					super.paintComponent(g);
					g.setColor(Color.BLACK);
					g.drawLine(xStart, yStart, xEnd, yEnd);
				}
			};
			drawPanel.setBackground(Color.WHITE);
			mainPanel.add(drawPanel, BorderLayout.CENTER);

		}

		class MyMouse extends MouseAdapter {

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

			@Override
			public void mouseReleased(MouseEvent e) {
				xEnd = e.getX();
				yEnd = e.getY();
				new ShapetTest().drawLine();
			}
		}
	}

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == buttons[0]) {
				new ShapetTest().drawLine();
			}
		}
	}
}

و أيضاً الكود مرفق هنا :

PaintTester.rar

#2

استخدم الميثود repaint()

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#3

أضفتها كما تقول

class MyMouse extends MouseAdapter {

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

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

و لكن دون جدوى

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

#4
				new ShapetTest().drawLine();
				getComponent().repaint();

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 12 أغسطس 2009 في 11:22

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#5

مش هضحك عليك و اقولك شغالة

أنا عاوز اعرف الخطا ال logic فين هنا

بطريقة عليمة عملية

#6

post-158349-1250065621_thumb.jpg

انت ليه مش مصدقنى

			public void mouseReleased(MouseEvent e) {
				xEnd = e.getX();
				yEnd = e.getY();
				System.out.println(e.getY());
				new ShapetTest().drawLine();
				getComponent().repaint();

			}

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#7

العفو يا باباشا مش اقصد أنى مش مصدقك

بس أنا كنت بضعها فى حتة غلط

لكن تلاحظ مشكلة أنك لما ترسم خط تانى الأول بيتمسح ليه ؟؟

		class MyMouse extends MouseAdapter {

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

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

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == buttons[0]) {
				new ShapetTest().drawLine();

			}
		}
	}

و كمان مش لازم نكتب new ShapTest().drawline()

و لا ايه رايك

؟

#8

الجافا لا تقدم دعماً لما يتم رسمه

وفي كل مرة يقوم نظام التشغيل برسم الشاشة

ستجد أن محتوى الرسم مسح

لذا لكي تقوم بحل هذه المشكلة

في الدالة paint يجب أن تقوم بعملية الرسم

ابحث هنا في المنتدى وستجد الكثير من الشيفرات الرسام

والتي تعمل على نفس الفكرة

تحياتي

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

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

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

728x90.png

#9

هنا لك الطريقة التى اتبعتها :

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

ماذا تقصد ب

اقتباس
لذا لكي تقوم بحل هذه المشكلة

في الدالة paint يجب أن تقوم بعملية الرسم

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Painter extends JFrame {

	private JButton lineButton;
	private JPanel mainPanel, drawPanel;
	private Point x1, y1, x2, y2;
	private List<Line2D> line2DList = new ArrayList<Line2D>();

	public Painter() {
		mainPanel = new JPanel(new BorderLayout());
		drawPanel = new JPanel() {

			@Override
			public void paintComponent(Graphics g) {
				super.paintComponents(g);
				Graphics2D g2 = (Graphics2D) g;
				g2.setColor(Color.BLACK);
				for (Line2D line : line2DList) {
					g2.draw(line);

				}
			}
		};
		drawPanel.setBackground(Color.YELLOW);
	   lineButton = new JButton("line");
		mainPanel.add(lineButton, BorderLayout.NORTH);
		mainPanel.add(drawPanel, BorderLayout.CENTER);
		getContentPane().add(mainPanel);
		MyMouse mouse = new MyMouse();
		addMouseListener(mouse);
		addMouseMotionListener(mouse);
		MyActionListener listener = new MyActionListener();
		lineButton.addActionListener(listener);
		//  drawLine();
		x1 = new Point();
		y1 = new Point();
		x2 = new Point();
		y2 = new Point();
	}

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

	class MyMouse extends MouseAdapter {

		@Override
		public void mousePressed(MouseEvent e) {
			x1 = e.getPoint();
			y1 = e.getPoint();
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			x2 = e.getPoint();
			y2 = e.getPoint();
			Line2D line1 = new Line2D.Double(x1.x, y1.y, x2.x, y2.y);
			line2DList.add(line1);
			repaint();

		}
	}

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == lineButton) {
				new MyMouse();
			}
		}
	}
}

و لكن المشكلة ان البانل لا تظهر بالون الأصفر كما اردت

لماذا؟؟

#10

تمكنت من عرض البانل بلونها كاا اريد

و العيب كان هنا

super.paintComponents(g);

لابد أن تكون

super.paintComponent(g);

حذفت ال s

ِشكراً

#11

صحيح يا بيشوي يجب أن تستدعي دالة الرسم الخاصة بالأب

والتي تحتوي على عمليات internalization لتجهيز البيئة للرسم

تحياتي

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

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

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

728x90.png

#12

يعنى الطريقة التى اتبعتها خاطئة

وضح كلامك معلش

#13

غيرت شكل الكود تماماً

و أصبح هكذا: (( و لكن الخط لا يظهر )) رجاء توضيح الأمور

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.List;
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, drawPanel;
	private String[] buttonNames = {"line", "rect", "oval", "polygon", "eraser"};
	private JButton[] buttons;
	private String[] imageNames = {"line.png", "rect.png", "oval.png", "connected.png", "erase.png"};
	private ImageIcon[] imageIcons;
	private List<Line2D> line2DList = new ArrayList<Line2D>();
	private List<Ellipse2D> ellipse2DList = new ArrayList<Ellipse2D>();
	private Point xStart, yStart, xEnd, yEnd;

	public MainPainter() {
		intializePanels();
		intializeButtons();
		intializationIcons();
		intializePoints();
	}

	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.setBackground(Color.BLUE);
		mainComponentPanel.setPreferredSize(new Dimension(200, 100));
		componentPanel = new JPanel(new GridLayout(3, 2, 5, 5));
		componentPanel.setBackground(Color.GREEN);
		new ShapetTest();
		drawPanel = new JPanel();
		drawPanel.setBackground(Color.WHITE);
		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));
		}
	}

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

	public JComponent getComponent() {
		return mainPanel;
	}

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

	class ShapetTest extends JPanel {

		public ShapetTest() {
			MyMouse mouse = new MyMouse();
			drawPanel.addMouseListener(mouse);
			drawPanel.addMouseMotionListener(mouse);
		}

		@Override
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			Graphics2D g2 = (Graphics2D) g;
			g2.setColor(Color.BLACK);
			drawLine(g2);
		}

		public void drawLine(Graphics2D g2) {
			for (Line2D line : line2DList) {
				g2.draw(line);
			}
			Line2D line = new Line2D.Double(xStart.x, yStart.y, xEnd.x, yEnd.y);
			line2DList.add(line);
		}

		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();
				drawPanel.repaint();
			}
		}
	}

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == buttons[0]) {
				new ShapetTest().drawLine(null);

			}
		}
	}
}
#14

سلام يا شباب

عارفكم زهقتم منى :huh:

استحملونا معلش

أنا غيرت فكرة التنفيذ تماماً

و مع ذلك الخط لا يظهر و لكنليس أسباب عميقة و لكن أنا اعتقد المرة هذه السبب بسيط ياريت تساعدونا

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 java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.List;
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, drawPanel;
	private String[] buttonNames = {"line", "rect", "oval", "polygon", "eraser"};
	private JButton[] buttons;
	private String[] imageNames = {"line.png", "rect.png", "oval.png", "connected.png", "erase.png"};
	private ImageIcon[] imageIcons;
	private List<Line2D> line2DList = new ArrayList<Line2D>();
	private List<Ellipse2D> ellipse2DList = new ArrayList<Ellipse2D>();

	public MainPainter() {
		intializePanels();
		intializeButtons();
		intializationIcons();
		ShapetTest shapetTest = 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.setBackground(Color.BLUE);
		mainComponentPanel.setPreferredSize(new Dimension(200, 100));
		componentPanel = new JPanel(new GridLayout(3, 2, 5, 5));
		componentPanel.setBackground(Color.GREEN);
		drawPanel = new JPanel();
		drawPanel.setBackground(Color.WHITE);
		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));
		}
	}

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

	public JComponent getComponent() {
		return mainPanel;
	}

	public JPanel getDrawPanel() {
		return drawPanel;
	}

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == buttons[0]) {
				new ShapetTest().getShapeTestEnumLine();
			}
		}
	}
}

ال Enum

----------

public enum ShapeTestEnum {

	LINE, OVAL, RECT;
}

class ShapeTest

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

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
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 ShapetTest extends JPanel {

	private ShapeTestEnum shapeTestEnum;
	private Point xStart, yStart, xEnd, yEnd;
	private List<Line2D> line2DList = new ArrayList<Line2D>();

	public ShapetTest() {
		MyMouse mouse = new MyMouse();
		addMouseListener(mouse);
		addMouseMotionListener(mouse);
		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);
		switch (shapeTestEnum) {
			case LINE:
				for (Line2D line2D : line2DList) {
					g2.draw(line2D);
				}
				Line2D line2D = new Line2D.Double(xStart.x, yStart.y, xEnd.x, yEnd.y);
				line2DList.add(line2D);
				break;
		}
	}

	class MyMouse extends MouseAdapter {

		@Override
		public void mousePressed(MouseEvent e) {
			xStart = e.getPoint();
			yStart = e.getPoint();
	   //	 System.out.println(xStart + " " + yStart);
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			xEnd = e.getPoint();
			yEnd = e.getPoint();
		 //   System.out.println(xEnd + " " + yEnd);
			new MainPainter().getDrawPanel().repaint();
		}
	}

	public ShapeTestEnum getShapeTestEnumLine() {
		return shapeTestEnum.LINE;
	}

	public void setShapeTestEnumLine(ShapeTestEnum shapeTestEnum) {
		this.shapeTestEnum = shapeTestEnum.LINE;
	}
}

ياريت بقى المرة دى تتكلموا ....غايبين ليه كده النهاردة :lol:

سلام

PaintTester.rar

#15

السلام عليكم

قمت بتعديل الشيفرة و هاهي في المرفقات

لا تسألني عن التعديلات الذي قمت بها

لأني لا أذكر عنها شيء

لكني لم أقم بحذف أي جزء من الشيفرة وإنما قمت بتعليق عمل الأجزاء المعتلة منها

ملاحظة:

بيشوي اقرأ الشيفرة جيداً قبل أن تسأل

لا تجعلني أمل (بكسر الميم) :wink:

تحياتي

modifications.rar

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

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

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

728x90.png

#16

سلام :

أولاً :رجعت يا خويا من السفر و أنا مستحلف للجافا و مستحلفلك كمان

ثانياً : اكتشفت كل الأخطاء الغبية بتعتى

ثالثاً: موضوع تمل منى ده انت هتشوف أيام منى هخليك تحلم بيا

رايعاً : و بعد المحاولات مش فاهم ايه الهدف من :

	public boolean thereIsChange

خامساً : فى مشكلة فى انى لما برسم خط : بحرك الماوس عادى لكن مش بيظهر غير لما اعمل كليك مرة أخرى على الشاشة

سادساً : رسمت دائرة و هذا كودها :

public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setColor(Color.BLACK);
		switch (shapeTestEnum) {
			case LINE:
				for (Line2D line2D : line2DList) {
					g2.draw(line2D);
				}
				if (IsThereChange) {
					Line2D line2D = new Line2D.Double(xStart.x, yStart.y, xEnd.x, yEnd.y);
					line2DList.add(line2D);
					IsThereChange = false;
				}
				break;
			case OVAL:
				for (Ellipse2D ellipse2D : ellipse2DList) {
					g2.draw(ellipse2D);
				}
				if (IsThereChange) {
					int x = Math.abs(xStart.x - xEnd.x);
					int y = Math.abs(yStart.y - yEnd.y);
					int width = Math.abs(xStart.x - xEnd.x);
					int height = Math.abs(yStart.y - yEnd.y);
					Ellipse2D ellipse2D = new Ellipse2D.Double(x, y, width, height);
					ellipse2DList.add(ellipse2D);
					IsThereChange = false;
				}
				break;
		}
	}

المشكلة فيها انك لم ترسم دائرة الخط بيختفى

فى حين انك لما ترسم خط و ترسم خط تانى لا يختفى الخط الأول

المشكلة التانية : أنك لما بترسم دائرة فى مكان نكتشف انها اترسمت فى مكان آخر

لماذا كل هذا ؟؟

متقوليش انت ملتنى و لا زهقتنى

استحمل للصبح

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

:lol:

سلام

#17

دا منطقي يا حج بيشوي

لأنه كما أخبرتك جافا ليس مسؤولة عن الحفاظ على رسمك

المسؤول هو أنت

لذا يجب في كل الدالة Paint أن تقوم بالرسم بشكل جيد

لاحظ في الشيفرة الخاصة بك

أنك لا تقوم برسم المستقيمات إذا كان المستخدم اختار أن يرس بيضاوي oval

والعكس أيضاً

تحياتي

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

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

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

728x90.png

#18
أنك لا تقوم برسم المستقيمات إذا كان المستخدم اختار أن يرس بيضاوي oval

يعنى عاوز تفهمنى انى لما ارسم بيضاوى اقوله يرسم خط كمان

و لا ايه وضح معلش....

طب مش ممكن استعمل BufferedImage بدل ال panel

أعتقد لا BifferedImage تحتفظ بالرسم

سلام

#19

أنا قصدت بموضوع رسم البيضاوي

الجافا تعتمد على الدالة paint عند كل عملية رسم

يعني بمجرد ما يطلب نظام التشغيل إعادة رسم الشاشة

تقوم جافا باستدعاء هذه الدالة

لهذا يفترض أن تقوم هذه الدالة

برسم كامل الرسم في كل الحالات

وأنت في حالة كون المستخدم رسم بيضاوياً جديداً

تقوم بسر البيضاويات فقط ولا تقوم برسم الخطوط

نفس المشكلة في حالة كون المستخدم رسم خطاً بعدما رسم مجموعة بيضاويات

لن تظهر مجموعة البيضاويات

وهنا تكمن المشكلة

الرسم على panel يكون أكثر مرونة

بحيث لو قررت في المستقبل أن تحذف تستطيع الحذف

تحياتي

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

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

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

728x90.png

#20

فكرت فى طريقة و لكن مش عارف أزاى أطبقها

	public void saveShapesOnPanel() {
		if(shapeTestEnum.equals(shapeTestEnum.LINE)){
			\\ عاوز أقول : لو البانل كان عليها line  لا نحذفه 
		}
	}

و من ثم أُنادى على هذه الدالة بهذه الطريقة :

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == buttons[0]) {
				drawPanel.setShapeTestEnum(ShapeTestEnum.LINE);
			 //   drawPanel.saveShapesOnPanel();
			}
			if (e.getSource() == buttons[2]) {
				drawPanel.setShapeTestEnum(ShapeTestEnum.OVAL);
			}
		}
	}

قرأت كام مقالة و لكن لم أتوصل

معلش ساعدنى شوية

شكراً

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

#21

السلام عليكم

الشيفرة بالمرفقات

تحياتي

paint.rar

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

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

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

728x90.png

#22

لم يخطر على بالى أنه من الممكن تجميع الأشكال كلها فى List واحدة

List<Shape>shapeList=new ArrayList<Shape>();

for(Shpe shape:shapeList)
g2.draw(shape);

then add any shape in shapelist
shapelist.add(line2d);

شكراً يا علاء على تعبك معنا و بنستفيد من هذه الأفكار

لكن الى مش عارف ايه لازمته IstherChange

بلغيها لكن مش بتأثر على الإطلاق ...

شكراً

#23

الحدث patint غير مضمون موعد حصوله

لو تركنا الحبل على الغارب

فسنجد أن قائمة الكائنات ArrayList امتلأت بكائنات ليس لها أي ضرورة

ولكي أتأكد فعلياً أن الكائن يجب أن يضاف إلى قائمة الكائنات

يجب أن نتأكد من أن هناك تغيير حصل

تحياتي

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

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

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

728x90.png

#24

شكرا علاء

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

معلش كنت عاوز اعمل تحت البانل الخاصة بال buttons بانل أخرى صغيرة و محدودة الحجم بحيث لما اضغط على زر الخط مثلا تظهر هذه البانل بها 3 انواع من الخطوط رفيع - سميك - سميك جداً .

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

أهذا مافعلته و حاولت أنا استعمل خاصية ال Box و لكن ما نفعت بردو .

الكود هذا الإنترفيس فقط

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

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,typePanel;
	private String[] buttonNames = {"line", "rect", "oval", "polygon", "eraser"};
	private JButton[] buttons;
	private String[] imageNames = {"line.png", "rect.png", "oval.png", "connected.png", "erase.png"};
	private ImageIcon[] imageIcons;
   // 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(new GridLayout(2, 1));
		mainComponentPanel.setBackground(Color.BLUE);
		mainComponentPanel.setPreferredSize(new Dimension(200, 100));

		componentPanel = new JPanel(new GridLayout(3,2));
		componentPanel.setBackground(Color.GREEN);

	 //   drawPanel = new ShapetTest();
	 //   drawPanel.setShapeTestEnum(ShapeTestEnum.LINE);
	 //   drawPanel.drawPanelColor();

		typePanel = new JPanel();
		typePanel.setBorder(BorderFactory.createEtchedBorder());
		typePanel.setBounds(10, 50, 50, 50);
		mainComponentPanel.add(typePanel);
	  //  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));
		}
	}

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

	public JComponent getComponent() {
		return mainPanel;

	}

	class MyActionListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == buttons[0]) {
	//			drawPanel.setShapeTestEnum(ShapeTestEnum.LINE);
			}
			if (e.getSource() == buttons[2]) {
	  //		  drawPanel.setShapeTestEnum(ShapeTestEnum.OVAL);
			}
		}
	}
}
#25

بما أن موضوع الجرافيك انتهى

فهذا الموضوع انتهى

تريد أن تسأل أسألة أخرى

اسأل في موضوع منفصل

لكي يستفيد الجميع

تحياتي

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

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

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

728x90.png

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

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

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

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

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