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

Multi Action Listeners

بدأه محــمد في 18 يناير 2010 · 2 رد · 431 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مساء الخير

يعطيكم العافيه

واجهتني مشكله في ال multi action listeners ما عرفت سببها

وهي عدم اعطائي النتائج المتوقعه

البرنامج بشكل مختصر.. يقوم بفتح frame with 4 widgets

* 1 button for change color of the circle

* 1 button for change the text

* circle

* & the text

i

ال button لتغيير لون لون الدائره لايعمل.. ولا اعرف السبب

ال button لتغير ال text .. يقوم بدوره "تغيير النص" مع دور زر تغيير اللون .. يقوم بدورين

مع ذلك لا يقوم بتغيير اللون إلا مره واحده ... والمفروض يتغير اللون في كل مره يتم فيها ضغط الزر

طبعاً البرنامج عطاني 2 exciptions ولا اعلم سببهما .. لكن حاولت اصلاح الأستثنائات بالطريقه التي سوف ترونها في الكود

واتمنى لو كانت طريقة إصلاحي للئستثنائات خاطئه او حتى لو تعلمون بطريقه افضل ..

اتمنى إرشادي إليها لإني إلى الآن اجهل الكثير من طرق التعامل مع الإستثنائات

( استخدمت run time exciption لأنه هذا ما اخبرني به عند تشغيلي البرنامج ) ولا اعلم صحة ما قمت به

والآن هذا هو البرنامج


import java.awt.event.*;
import java.awt.*;


public class SimpleGUI {

JFrame frame;
JLabel label;

public static void main(String[] args) {
SimpleGUI gui = new SimpleGUI();

try {
gui.go();
} catch(RuntimeException ex) {}
}

public void go () /* throws RuntimeException */ {
try {
cbutton.addActionListener(new ColorListener());
} catch(RuntimeException ex) {}

frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JButton lbutton = new JButton("change label");
lbutton.addActionListener(new LabelListener());


JButton cbutton = new JButton("change circle");


label = new JLabel("i'm a labele");
MyDrawPanel drawPanel = new MyDrawPanel();

frame.getContentPane().add(BorderLayout.SOUTH, cbutton);
frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
frame.getContentPane().add(BorderLayout.EAST, lbutton);
frame.getContentPane().add(BorderLayout.WEST, label);

frame.setSize(300, 300);
frame.setVisible(true);


}

class LabelListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
label.setText("ouch !");
}
class ColorListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
frame.repaint();
}
}
}

}

import javax.swing.*;

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


import javax.swing.*;

public class MyDrawPanel extends JPanel {

public void paintComponent(Graphics g) {

Graphics2D g2d = (Graphics2D) g;

g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);

Color randomColor = new Color(red, green, blue);
g2d.setColor(randomColor);
g2d.fillOval(10, 10, 300, 300);

}

}

import java.awt.*;

i

هذا كل شيئ :)

تم تعديل هذه المشاركة بواسطة herch في 18 يناير 2010 في 12:31 — السبب: الوسم [code]

نداء ما كان بعيداً

#2

لست مجبرا على التقاط الRuntimeException، لأنها ممكن رفعها في أي مكان في البرنامج، ولا يمكن التنبؤ اين تقع، وبالتالي لن نعلم كيفية التعامل معها.

عندما تريد التقاط أي استثناء (exception)، فلازم تضع شيئا داخل ال catch bloc، إذا لم ترد عمل شيء فعلى الأقل قم بطباعة رسالة الإستثناء ومصدره.

أيضا، لماذا تضع ColorListener داخل LabelListener؟؟!!

هذا الكود المعدل

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

public class SimpleGUI {

	JFrame frame;
	JLabel label;

	public static void main(String[] args) {
		SimpleGUI gui = new SimpleGUI();
		gui.go();
	}

	public void go() {
		JButton cbutton = new JButton("change circle");
		cbutton.addActionListener(new ColorListener());

		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JButton lbutton = new JButton("change label");
		lbutton.addActionListener(new LabelListener());

		label = new JLabel("i'm a labele");
		MyDrawPanel drawPanel = new MyDrawPanel();

		frame.getContentPane().add(BorderLayout.SOUTH, cbutton);
		frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
		frame.getContentPane().add(BorderLayout.EAST, lbutton);
		frame.getContentPane().add(BorderLayout.WEST, label);

		frame.setSize(300, 300);
		frame.setVisible(true);


	}

	class LabelListener implements ActionListener {

		public void actionPerformed(ActionEvent event) {
			label.setText("ouch !");
		}
	}

	class ColorListener implements ActionListener {

		public void actionPerformed(ActionEvent event) {
			frame.repaint();
		}
	}
}

public class MyDrawPanel extends JPanel {

	@Override
	public void paintComponent(Graphics g) {

		Graphics2D g2d = (Graphics2D) g;
		g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
		int red = (int) (Math.random() * 255);
		int green = (int) (Math.random() * 255);
		int blue = (int) (Math.random() * 255);

		Color randomColor = new Color(red, green, blue);
		g2d.setColor(randomColor);
		g2d.fillOval(10, 10, 300, 300);

	}
}

تم تعديل هذه المشاركة بواسطة herch في 18 يناير 2010 في 12:51

#3

يعطيك العافيه عزيزي

جربت البرنامج واشتغل وكل شي اوكي

اقتباس
أيضا، لماذا تضع ColorListener داخل LabelListener؟؟!!

اهاا .. اعذرني عزيزي ربما سقط سهواً

ربما كان من كثرة التركيز فقط

شكراً يا بطل على كل حال :wink:

تم تعديل هذه المشاركة بواسطة محمد_ح في 18 يناير 2010 في 13:23

نداء ما كان بعيداً

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