السلام عليكم
قمت بكتابة برنامج عباره عن عجلة مكونة من 6 اقسام كل قيم بلون مختلف، وهذه العجله تتحرك بشكل دائري فتبدوا انها تسير
طبعا استخدمت paintComponent لاتمكن من استخدام Timer لتصبح العجلة متحركه وايضا استخدمت extends JPanel وليس JFrame لأتمن من استخدام paintComponent
المشكلة الان البرنامج يعمل بشكل طبيعي لكني اردت تطويره واضافة زرين احدهما للتشغيل والاخر للايقاف (وقد اضيف ادواات تحكم اخرى بعد ان تحل المشكلة)
لكن المشكلة انني لم اتمكن من اضافة الحدث Action الى الزر JButton حيث اني قمت بتعريف الزر في دالة الmain وطبعا لا استطيع ان اعرف الزر في مكان اخر لاني استخدمت الextends JPanel
أتمنى منكم المساعدة اة اقتراح الافكار لتنفيذ المطلوب
طبعا اضفت الاكشن ضمن تعليقات وايضا سأقوم بحذف دالة Timer.start() من الpaintComponent واضيفها الى حدث الزر
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.Timer;
/**
*
* @author HASSAN
*/
public class ExamWheel extends JPanel implements ActionListener {
private int i=0;
Boolean doDraw = true;
Timer tm = new Timer(10, this);
public void paintComponent(Graphics graphics) {
if (doDraw){
super.paintComponent(graphics);
Graphics2D g = (Graphics2D) graphics;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(Color.CYAN);
g.fillArc(50, 50, 300, 300, i+0, 60);
g.setColor(Color.red);
g.fillArc(50, 50, 300, 300, i+60, 60);
g.setColor(Color.green);
g.fillArc(50, 50, 300, 300, i+120, 60);
g.setColor(Color.blue);
g.fillArc(50, 50, 300, 300, i+180, 60);
g.setColor(Color.gray);
g.fillArc(50, 50, 300, 300, i+240, 60);
g.setColor(Color.pink);
g.fillArc(50, 50, 300, 300, i+300, 60);
}
tm.start();//I want to delet the start() method from paintComponent and write it in b_satrt action method
}
public static void main(String[] args) {
JFrame jf = new JFrame();
ExamWheel wheel = new ExamWheel();
JButton b_start = new JButton("Start");
JButton b_stop = new JButton("Stop");
JSlider slider = new JSlider();
JPanel p1 = new JPanel(new GridLayout(0, 1));
JPanel p2 = new JPanel();
p1.setPreferredSize(new Dimension(400,400));
p1.add(wheel);
p2.setPreferredSize(new Dimension(400,100));
p2.setBackground(Color.gray);
p2.add(b_start);
p2.add(b_stop);
jf.setSize(400,550);
jf.setResizable(false);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.setTitle("Wheel..");
jf.add(p1, BorderLayout.NORTH);
jf.add(p2, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e) {
i++;
repaint();
//if(e.getSource() == b_start){
// doDraw=true;
// tm.start();
//}else if(e.getSource() == b_stop){
// doDraw=false;
// tm.stop();
//}
}
}يبيبي