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

سوال فى جزئية رسم الخط فى برنامج الرسام

بدأه mr.beshoy في 17 نوفمبر 2008 · 3 رد · 1,217 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام ياشباب

انا هنا فى الكود ده المشكلة انى لما اضغط على الزرار ثم بالماوس ارسم عى ال bufferedimage

لا يتم الرسم و لكن عندما اضغط بالماوس فى نقطيتن مختلفين على الbufferedimage

ثم على الزرار يتم رسم الخط

وهذا ليس ما اريده ... ماريدهو هو ان عندما اضغط على الزار ثم اذهي بالموس على الbufferedimage

استطيع الرسم

و هناك ايضا مشكلة اخرى تراودنى و هى انى اريد عندا ارسم خط و اضغط كليك على الماوس

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

اتمنى ولو حتى اى حد يلمحلى على طريقة تنفيذ الفكرة الاخيرة دى

و ادى الكود بتاعى

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TextDemo extends JFrame{

	private JButton text=new JButton("draw text");
	private JPanel panelButton=new JPanel();
	private DrawText drawtext=new DrawText();
	public TextDemo(){
		panelButton.add(text);

		text.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			 drawtext.draw();
			}
		});
		getContentPane().add(panelButton,BorderLayout.NORTH);
		getContentPane().add(drawtext,BorderLayout.CENTER);

	}
	public static void main(String[]args){
		JFrame frame=new TextDemo();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setSize(500,250);
	}
}

و أدى الكلاس التانى

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

public class DrawText extends JPanel {

	private Point p1 = new Point();
	private Point p2 = new Point();
	public BufferedImage image;
	Graphics g;

	public DrawText() {
		image = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB);
		g = image.getGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, 1000, 1000);
		g.setColor(Color.BLACK);
		MymouseAdapter mouse = new MymouseAdapter();
		addMouseListener(mouse);
		addMouseMotionListener(mouse);
	}

	@Override
	public void paint(Graphics g) {
		super.paintComponents(g);
		g.drawImage(image, 0, 0, null);
	}

	public class MymouseAdapter extends MouseAdapter {

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

		@Override
		public void mouseReleased(MouseEvent e) {
			p2 = e.getPoint();

			//repaint();
		}
	}

	public void draw() {
		g.setColor(Color.BLACK);
		g.drawLine(p1.x, p1.y, p2.x, p2.y);
		repaint();
	}
}

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 18 نوفمبر 2008 في 00:15 — السبب: حذف التكرار

#2

استخدم متغير من نوع boolean في الفئة الثانية

واجعل له دالة set

في الحدث للفئة الأولى استخدم هذه الدالة لتغيير قيمة المتغير إلى true

بدلاً من مناداتها للدالة draw

في الفئة الثانية ضع جملة شرطية على

 p1 = e.getPoint();

وعلى

p2 = e.getPoint();

أظن ينقص الكثير لكن فكر قليلاً

واسأل ثانية

بالنسبة للفكرة التي تريد

لم أفهمها

أعد الصياغة مرة ثانية

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

تحياتي

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

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

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

728x90.png

#3

الكود الخاص برسم الخط :

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.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class TextDemo extends JFrame {

	private JButton text = new JButton("draw text");
	private JPanel panelButton = new JPanel();
	private JPanel linetype = new JPanel();
	private JPanel radiopanel = new JPanel();
	private String[] radiobutton = {"1 pix", "2 pix", "3 pix", "4 pix"};
	private JRadioButton[] radio = new JRadioButton[radiobutton.length];
	private ButtonGroup buttongroub = new ButtonGroup();
	private DrawText drawtext = new DrawText();

	public TextDemo() {
		panelButton.add(text);

		text.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				linetype.setBackground(Color.BLUE);
				linetype.setPreferredSize(new Dimension(250, 250));
				for (int i = 0; i < radiobutton.length; ++i) {
					radio = new JRadioButton();
					radio.setText(radiobutton);
					buttongroub.add(radio);
				   radiopanel.add(radio);
				   getContentPane().add(radiopanel,new GridLayout(4,1));
				}
				linetype.setVisible(true);
				drawtext.setMode(DrawingMode.Line);
			}
			});
		getContentPane().add(panelButton, BorderLayout.NORTH);
		getContentPane().add(drawtext, BorderLayout.CENTER);


		getContentPane().add(linetype, BorderLayout.EAST);

	}

	public static void main(String[] args) {
		JFrame frame = new TextDemo();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setSize(500, 250);
	}
}

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

public class DrawText extends JPanel {

	private Point p1 = new Point();
	private Point p2 = new Point();
	public BufferedImage image;
	private DrawingMode mode;
	Graphics g;

	public DrawText() {
		image = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB);
		g = image.getGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, 1000, 1000);
		g.setColor(Color.BLACK);
		MymouseAdapter mouse = new MymouseAdapter();
		addMouseListener(mouse);
		addMouseMotionListener(mouse);
	}

	@Override
	public void paint(Graphics g) {
		super.paintComponents(g);
		g.drawImage(image, 0, 0, null);
	}

	public DrawingMode getMode() {
		return mode;
	}

	public void setMode(DrawingMode mode) {
		this.mode = mode;
	}

	public class MymouseAdapter extends MouseAdapter {

		@Override
		public void mousePressed(MouseEvent e) {
			p1 = e.getPoint();

		}

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

	public void draw() {
		g.setColor(Color.BLACK);
		g.drawLine(p1.x, p1.y, p2.x, p2.y);
		repaint();
	}
}

public enum DrawingMode {
	Line;
}

مش هذا هو الذى تقصده ؟؟

و أتمنى لو لك كود آخر لرسم الخط ضعه كى ما نعرف أفكار أُخر . ( و برحتك بردو دى حاجة ترجعلك )

الفكرة التى أريد تطبيقها على الخط هاك تفسيرها :

عندما ترسم الخط أريد حينما تضغط عليها CLICK بالماوس يظهر على الخط نقطتين بارزتين واحدة فى بداية الخط و الأخرى فى نهايته .

من خلال هاتين النقطتين أستطيع أن أشد الخط بالماوس و أتحكم فى طوله ( أتمنى تكون وضحت الفكرة )

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

#4

انظر المشاريع في موضوع الأخ أبو الفؤاد المثبت

ستجد مشروع الرسام

هناك وضعت مشروع رسام عملته مسبقاً

حمله واطلع على الشيفرة

ستفيدك بإذن الله

بالنسبة للفكرة تحتاج إلى عمل عليها

ليس في بالي شيء معين

تحياتي

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

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

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

728x90.png

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

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

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

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

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