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

البرمجة بتقنية Gui هل سهلت الجافا ام صعبتها ؟

بدأه thesharp في 2 أغسطس 2009 · 15 رد · 1,234 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

وبعد

الان فتحت برنامج NetBeans IDE 6.7

ورحت مشروع جديد وحددت application desktop

وعمل لي فورم فاضي حطيت فيه زر واحد وتحته ليبل

يتولد لي هذا الكون تلقائيا



package school;

import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;


/**
* The application's main frame.
*/
public class SchoolView extends FrameView {


public SchoolView(SingleFrameApplication app) {
super(app);


initComponents();

// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i < busyIcons.length; i++) {
busyIcons = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);


// connecting action tasks to status bar via TaskMonitor
TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String)(evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer)(evt.getNewValue());
progressBar.setVisible(true);
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});
}


@Action
public void showAboutBox() {
if (aboutBox == null) {
JFrame mainFrame = SchoolApp.getApplication().getMainFrame();
aboutBox = new SchoolAboutBox(mainFrame);
aboutBox.setLocationRelativeTo(mainFrame);
}
SchoolApp.getApplication().show(aboutBox);
}


/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {


mainPanel = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
menuBar = new javax.swing.JMenuBar();
javax.swing.JMenu fileMenu = new javax.swing.JMenu();
javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();
javax.swing.JMenu helpMenu = new javax.swing.JMenu();
javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();
statusPanel = new javax.swing.JPanel();
javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator();
statusMessageLabel = new javax.swing.JLabel();
statusAnimationLabel = new javax.swing.JLabel();
progressBar = new javax.swing.JProgressBar();


mainPanel.setName("mainPanel"); // NOI18N

org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(school.SchoolApp.class).getCont
ext().getResourceMap(SchoolView.class);
jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N
jButton1.setName("jButton1"); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});


jLabel1.setBackground(resourceMap.getColor("jLabel1.background")); // NOI18N
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
jLabel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jLabel1.setName("jLabel1"); // NOI18N


javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.
LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(26, 26, 26)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 353, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(144, 144, 144)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(21, Short.MAX_VALUE))
);
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(28, 28, 28)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(63, Short.MAX_VALUE))
);


menuBar.setName("menuBar"); // NOI18N

fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N
fileMenu.setName("fileMenu"); // NOI18N


javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(school.SchoolApp.class).getCont
ext().getActionMap(SchoolView.class, this);
exitMenuItem.setAction(actionMap.get("quit")); // NOI18N
exitMenuItem.setName("exitMenuItem"); // NOI18N
fileMenu.add(exitMenuItem);


menuBar.add(fileMenu);

helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N
helpMenu.setName("helpMenu"); // NOI18N


aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N
aboutMenuItem.setName("aboutMenuItem"); // NOI18N
helpMenu.add(aboutMenuItem);


menuBar.add(helpMenu);

statusPanel.setName("statusPanel"); // NOI18N

statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N

statusMessageLabel.setName("statusMessageLabel"); // NOI18N

statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N


progressBar.setName("progressBar"); // NOI18N

javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel);
statusPanel.setLayout(statusPanelLayout);
statusPanelLayout.setHorizontalGroup(
statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(statusPanelSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
.addGroup(statusPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(statusMessageLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 230, Short.MAX_VALUE)
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(statusAnimationLabel)
.addContainerGap())
);
statusPanelLayout.setVerticalGroup(
statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(statusPanelLayout.createSequentialGroup()
.addComponent(statusPanelSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(statusMessageLabel)
.addComponent(statusAnimationLabel)
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3))
);


setComponent(mainPanel);
setMenuBar(menuBar);
setStatusBar(statusPanel);
}// </editor-fold>


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel mainPanel;
private javax.swing.JMenuBar menuBar;
private javax.swing.JProgressBar progressBar;
private javax.swing.JLabel statusAnimationLabel;
private javax.swing.JLabel statusMessageLabel;
private javax.swing.JPanel statusPanel;
// End of variables declaration


private final Timer messageTimer;
private final Timer busyIconTimer;
private final Icon idleIcon;
private final Icon[] busyIcons = new Icon[15];
private int busyIconIndex = 0;


private JDialog aboutBox;
}

ماذا يعني هذا

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

وبقي علي فقط امور بسيطه

ام انا مسالة الكلاس والميثود والوراثة مازلت بحاجه الى معرفتها وادراجها ضمن هذا الكود ؟

تحياتي للمبدعين في هذا المنتدى وكذلك الرواد الاخرين

#2

مسألة الكلاس و الميثود تستخدما في ال business بتاعك,

يعني الفورم اللي ظهرلك هو فقط لتسهيل ال GUI

لكن مازال يجب عليك أن تسخدم إمكانيات اللغه لكتابة ال business (logic) المعني به تطبيقك

#3

السلام عليكم ...

كيف لم تسهلها, هل جربت في حياتك كتابة برنامج يحتوي على GUI باستخدام JCreator!

#4

بالعكس GUI سهل كثير العمل انا كنت اشتغل علي JCreator كثير في بناء الواجهات بس كانت صعبه كثير لانو الكود طويل ويحتاج الي وقت وجهد لكتابتو اذا كان هناك ما يريحنى من هل المشقه والوقت لما لا !

ab66i830gh93.gif

i25sctz8qnls.jpg

#5

أولاً : ليس من الصواب استعمال خاصية ال Drag & Drop إذا كنت مبتدأ فى الجافا أو السى شارب أو ال C++ أو الQT

فكل من هذه اللغات لها IDE يتمتع بخاصية ال Drag & Drop

فى البداية يجب كتابة ال interface بيدك حيث تكون على علم بكيفية تصميمه و لا تعتقد أن هذا إهدار للوقت و إن كنا نرى ذلك فى الظاهر و لكنها عملية مفيدة جداً و تكتسب منها مهارة

فى استعمال اللغة .... بعد ذلك عندما تفكر فى استعمال خاصية ال Drag and Drop تكون عل علم بكل شئ يحدث بحكم كتابتك السابقة ..

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

و ال Drag and Drop

لا يلغى قواعد ال OOP من قال هذا يا عزيزى !!!

ال method & class & array & inheritence & polymorphism & interface .....etc

كلها تُستعمل و تكتبها أنت لا يكتبها ال IDE

أتمنى يكون كلامى واضح ... و لو مش واضح الأحباء الأفاضل يوضحون لك أكثر منى

سلام

بيشوى عاطف

#6

فعلاً أنا أؤيد بيشوي في موضوع تعلم GUI

هناك الكثير من البرامج التي تستلوم المعرفة ببناء الواجهات بشكل يدوي

لكني لا أؤيده بتعليمها للمبتدئين

أعتقد أنها خطوة لبرامج متقدمة

تحياتي

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

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

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

728x90.png

#7

هل تقصد مستر علاء أن على المبتدئ أن يستعمل ال Drag &Drop و لا يكتب ال GUI بنفسه ؟؟؟

إن كان كذلك : لما يبداً يكتب بنفسه من البداية مش هيكون صعب عليه بعد كده ... لكن يتعلم ال Drag &Drop فى الأول ثم يبدأ يكتب هذه تكون صعبة ...

و عموماً اختلاف الآراء و الأفكار يولد معلومات :lol:

#8

الفكرة يا بيشوي لا تضيع وقتك في تعلم ما لا تحتاجه

بينما هناك ما تحتاجه

تعلم الأساس ثم انتقل إلى الفروع

تحياتي

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

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

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

728x90.png

#9

ماشى يا باشا كلامك منطقى أيضاً

#10

السلام عليكم

بصراحه ردود جميلة جدا اشكركم جميعا على الردود المفيدة

فعلا انا قلت ليش اجلس اكتب كود يولد لي نافذه مع اني الاقيها جاهزه

وبحثت في جميع المنتديات ما فيه احد شرح Drag &Drop و GUI

كل الشروح الموجوده على الاساسيات

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

مثلا

فكرت اسوي برنامج شجرة للعائلة

مادري كم كلاس احتاجه

مادري كم متغير احتاجه

مادري هل ساحتاج للوراثة ام لا

ليس فقط شجرة العائلة اي فكرة تخطر ببالي الاقي مشكله في كيفية تصورها وما ذا تحتاج

هل هناك احد عمل درسا مع مثاله وكتب الخطوات الاولية قبل ان يبدا البرمجه ؟؟

في الختام اشكر كل الاساتذة والمهندسين والمبدعين الذين اجابو على تسائلي

تقبلوا تحياتي

#11

موضوع كام كغير ... بيتحدد بناءاً على مالذى تريده أنت ...

يعنى مثلاً مثال بسيط جداً

عاوزين نعمل مشروع يجمع رقمين :lol: إذن مالمطلوب ؟؟ مطلوب متغيرين من نوع int او كما تريد أنت ...

يعنى عاوز اقول المتغيرات بتُفرض طبقاً لجو عمل البرنامج ....

كام كلاس ؟؟؟ بتتوقف على ما تريد فعله ايضاً

الوراثة مبنية على أساس أن لديك مثلاً كلاسين تريد أن ترث من أحدهما دالة للكلاس الآخر و هكذا ....

محتاجة ممارسة و تدريب .... اقرأ - أغلط - حاول -اسهر- شد فى شعرك :lol: - اسئل فبالتالى ستتعلم

سلام

بيشوى عاطف

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

#12

فعلاً كلام بيشوي صحيح جداً

تستطيع عمل برنامج كبير جداً

وفي نفس الوقت تستطيع عمل برنامج صغير

على نفس الفكرة

تحياتي

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

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

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

728x90.png

#13

مشكورين على التوجيها

هل من الممكن ان تضعو هنا ثلاثة امثلة تتدرج بالصعوبه

مثال اول بسيط

مثال ثاني متوسط

مثال ثالث اصعب شوي

يتبين من خلالها كيف تم تعديد المتغيرات وعدد الكلاسات؟

لو كل واحد من اساتذتنا حط مثال بيكون جميل

ولكم جزيل الشكر

تم تعديل هذه المشاركة بواسطة thesharp في 4 أغسطس 2009 في 16:59

#14

الموضوع لا علاقة له بالبرمجة

هذا علم منفصل ويسمى بتحليل الأنظمة

تحياتي

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

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

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

728x90.png

#15

السلام عليكم

استاذي الكريم علاء حفظك الله

انا اعرف انه فيه خورزميات وتحليل ومادري ايش تسهل عمل البرنامج

ولكن انا افضل ان تختصر لي الوقت انت وامثالك من البارعين في البرمجه

وتعطيني مثال واقعي انطلق منه لان كل الامثله التي مرت معي سوا بالعربي او بالانجليزي

كلها امثله لا معنى لها

مثل يقولك كيف تجمع عددين كيف تعمل اله حاسبه كل هذي الاشياء اعرفها وطبقتها اكثر من مرة تمام

ولكن الذي اريده انا ان تاخذ مثال برنامج من الواقع

مثلا تقول يلا نسوي تقويم شهري ( رزنامه ) ثم تضع الخطوات حتى يكتمل البرنامج

فانا من خلال خطواتك راح اكتسب مهرات اعداد البرنامج بدون ما اروح ادرس الخورزميات والتحليل والمشاكل هذي

اتمنى اكون وصلت الفكره اليكم والكلام موجه لجميع الاخوة البارعين والمبدعين في البرمجه ادري قد يكون الطلب ثقيل

والوقت ما يسمح لكن انتم علماء في هذا الفن ووانا استفتيكم واشهد انكم لم تقصروا معي بالعكس استفدت منكم الكثير

تقبلوا تحياتي

#16

بإمكانك أن تبحث هنا في المنتدى

ستجد الكثير من المشاريع الجماعية والفردية التي تم بناؤها خطوة بخطوة

استفسر كما تشاء وسأجاوبك بإذن الله

أعتذر عن عدم مقدرتي على القيام بشيء جديد أمامك

وذلك بسبب ضغوط العمل المختلفة

تحياتي

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

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

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

728x90.png

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