آموزش گرافیک در جاوا

sara85

عضو جدید
یکی از ویژگی های جذاب جاوا اینه که می تونیم برنامه هایی به این زبان بنویسیم که از قابلیت های گرافیکی برخوردارند.برای این منظور ، کتابخانه بزرگی از کلاس ها تعریف شده اند که درپکیج java.awt قرار دارند .کلاس های موجود در این پکیج امکان کار کردن با پنجره ها ، منو هاو دکمه ها و ... رو فراهم می کنند.
برای همین تصمیم گرفتم یه تایپک جدید که به آموزش گرافیک در جاوا می پردازه ایجاد کنم. برای استفاده از این تایپک لازم به زبان جاوا آشنایی داشته باشید و به مفاهیمی همچون ارث بری و چند ریختی مسلط باشید. از همه کسایی که علاقه مند به این موضوع هستند خواهش می کنم منو در پیشبرد این هدف کمک کنند .
 

sara85

عضو جدید
جلسه اول

جلسه اول

در راس سلسله کلاس های جاوا ، کلاس Object قرار دارد. سایر کلاس ها در جاوا از این کلاس مشتق می شوند .
کلاس Component از کلاس Object و کلاس Containerاز کلاس Component مشتق می شود .
سایر کلاس هایی که از کلاس Componentمشتق می شوند شامل : Button , Lable, ... که در ادامه بیشتر توضیح داده خواهند شد.
کلاس Component حاوی متد های زیادی است که هر کلاسی که از آن مشتق می شود ، می تواند از آنها استفاده کند.این کلاس کلاسی انتزاعی است و همان طور که می دانیم نمی توانیم اشیایی از آن را ایجاد کنیم. و برای استفاده از آن باید کلاس هایی از آن مشتق کنیم و از آن کلاس ها اشیایی را ایجاد کنیم.
کلاسContainer نیز کلاسی انتزاعی است و لی کلاس Window که از این کلاس مشتق می گردد انتزاعی نمی باشد و می توان اشیاایی از آن ایجاد کرد ولی معمولا ما در برنامه ها از کلاسWindowاستفاده نمی کنیم بلکه از دوکلاس مشتق شده از آن به نام های Frame , Dialog استفاده می کنیم.

منابع این جلسه
آموزش گام به گام جاوا (مهندس جعفر نژاد قمی)
 
آخرین ویرایش:

efhc

عضو
سلام ;)

ایده ی خوبی رو در نظر گرفته اید ;););););););););););)

امیدوارم دیگران از این فرصت استفاده کنند!!!!!;);)
 

sara85

عضو جدید
قبل از پرداختن به کلاس های کتابخانه AWT نگاهی به برنامه های رویدادی(event deriven program) می اندازیم.برنامه هایی که قبلا می نوشتیم برنامه های رویه ای بودند یعنی ترتیب برنامه ها کاملا مشخص بود ، داده ها از کاربر دریافت می شد ساختار های تصمیم گیری و تکرار طی می شد و خروجی تولید می گردید.

رویداد شامل هر عملی (مثل کلیک موس، فشردن یک دکمه ،...) است که توسط کاربر انجام می گیرد و برنامه در پاسخ به آن عمل مناسبی را انجام می دهد.در برنامه های رویدادی ،کاربر می تواند رویداد ها را به هر ترتیبی که می خواهد انجام دهد. و بر اساس نیاز خود یه رویداد را ایجاد کند.در برنامه های رویدادی ، مولفه ای که رویداد از آنجا آغاز شده (مثل انتخاب گزینه ای از منو ) منبع رویداد محسوب می گردد.شی ای که رویداد را دریافت می کند شنودگر (listener ) نام دارد. این شنودگر شامل یک متد پردازنده است که به آن رویداد پاسخ می دهد.

انواع رویداد ها
رویدادهای عملیاتی:آنهایی که توسط عملیاتی از کاربر مثل کلیک کردن دکمه ای توسط موس ، انتخاب گزینه ای از منو و ... به وجود می آیند.
رویدادهای تنظیمی:scrollbar ها این نوع رویداد را تولید می کنند.
رویدادهای مولفه ها:رویداد هایی شامل نمایش مولفه ها ، تغییر اندازه ، پنهان سازی و ... را کنترل می کنند.
رویدادهای گزینه ها : وقتی رخ می دهند که که کاربر در مولفه ای مثل check box یا منویی تغییر ایجاد کند.
رویدادهای موس: زمانی رخ می دهند که کاربر موس را فشار می دهد یا رها می کند یا موس را داخل یا خارج یک مولفه می برد.
رویدادهای پنجره ای: وقتی رخ می دهد که پنجره ای باز یا بسته می شود یا minimize , maximize می گردد.

ایجاد و ثبت اشیای شنودگر
اشیای شنودگر از روی کلاس هایی درست می شوند که interface شنودگر را پیاده سازی (implements) می کنند. در کل ما 11 interface شنودگر داریم که همه ی آنها از کلاس EventListener مشتق می شوند. این واسط ها در پکیج java.awt.event  که در هنگام کار با آنها باید به برنامه import شوند.
برای اتصال شی شنودگر به شی ای که قرار است منتظر رویدادی باشد باید شی شنودگر را با استفاده از متد ثبت(register) اشیای شنودگر ثبت کنیم.همه ی این متد ها با قالب AddxxxListener نامگذاری می شوند که در آن xxx نوع شنودگری است که باید ثبت شود.هر متد ثبت کننده ، شی شنودگر را به عنوان پارامتر دریافت می کند.
مثال:
برای افزودن شنودگری به یک پنجره ،از متد addWindowListener استفاده می شود که پارامتر ان
شی از کلاسی است که واسط WindowListener را پیاده سازی می کند:

(theWindow.addWindowListener(new WindowListener
منابع این جلسه
آموزش گام به گام جاوا (مهندس جعفر نژاد قمی)
 
آخرین ویرایش:

sara85

عضو جدید
کلاس Frame

کلاس Frame

فریم همانند یک پنجره چهار گوش است ه می توان اشیای دیگر را در آن قرار داد
بعضی از متد های کلاس Frame :
Frame :شیئی از فریم می سازد که در حالت عادی قابل مشاهده نیست.
Frame (String :فریمی با عنوان String که در حالت عادی قابل مشاهده نیست می سازد.
setVisible(boolean:اگر پارامتر این متد true باشد فریم قابل مشاهده می شود.
setResizeAble(boolean :اگر پارامتر این متد true باشد اندازه فریم قابل تغییر می شود.
setSize(width, height:ابعاد فریم را که بر حسب پیکسل می باشد تعیین می کند.
getTitle:عنوان فریم را می گیرد.
setTitle(String:رشته پارامتر را می گیرد و آن را عنوان فریم قرار می دهد

حالا یک برنامه ساده که یک فریم خالی با ابعاد 100*100 ایجاد می کند را می بینیم:

import java.awt.*
public class test
}
public static void main(String[] args)
}
Frame frame =new Frame();
final int width=200,height=300;
frame.setSize(width, height);
frame.setvisible(true);
frame.setTitle("Simple Drawing Tool)
{
{​


 
منابع این جلسه
آموزش گام به گام جاوا (مهندس جعفر نژاد قمی)
 
آخرین ویرایش:
  • Like
واکنش ها: efhc

sara85

عضو جدید
متد paint( )

متد paint()، بخشی از تمامی برنامه های ما خواهد بود، چرا که بدون آن توانایی نمایش هیچ چیز را نخواهیم داشت.
هر گاه چیزی در پنجره نیاز به نمایش و یا نمایش دوباره داشته باشد، متد paint( ) فراخوانی خواهد شد.
 این متد در کلاس component تعریف شده که ما بسته به برنامه و شکلی که می خواهیم رسم کنیم این متد را override می کنیم.
متد paint() یک آرگومان می گیرد. که این آرگومان شی ای از کلاس Graphics می باشد .مورد زیر مثالی است از یک متد paint() ساده است:

public class paint(Graphics g) {
g.drawLine(3,5,7,3
}
که خطی را از نقطه به مختصات 5و3 تا نقطه به مختصات 3و7 رسم می کند.
هر بار که بخواهیم مولفه های درون پنجره مجددا رسم گردند باید متد repaint صدا زده شود .
 

53hamed

عضو جدید
چرا؟

چرا؟

من همین الان عضو شدم
داشتم قوانین فروم رو می خوندم
که با دیدن this جا خوردم.
برای this متأسّفم.:(

همون طور که می دونید this یک کلمه کلیدی تو زبان java است
و خیلی جاها کار برنامه نویسا رو راحت کرده
من این جوری ترجمش می کنم :
" اون چیزی که باید باشه "
 

marjan.kh

عضو جدید
سوال درمورد textArea

سوال درمورد textArea

سلام.
یه سوال دارم.میتونید کمکم کنید لطفا؟
چه طوری کل textArea رو پاک کنم؟تابعی واسه این کار هست؟
ممنون میشم اگه زود جوابم رو بدید.
 

mojdeh-eng

عضو جدید
کاربر ممتاز
سلام...خیلی خوبه...فقط میشه بعداز اینکه هرقسمت آموزش تموم شد فایل متنی مربوط به اون رو هم برای دسترسی سریعتر به تمام مطالب اون قسمت بذارید...
خیل ممنون...
 

هانا و هلنا

عضو جدید
من الان یک برنامه جدول گرافیکی دارم که بعضی از این خونه هاش سیاه شدن و من میخوام داخل خونه های سفید کارکتر بگذارم البته این کارکترها داخل فایل هستن مشکل من الن اینه که نمیدونم چطوری این دوتا رو بهم متصل کنم

کد:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.applet.*;
import java.io.*;
import javax.swing.*;
 public class proj extends java.applet.Applet {
  
  
    
  kj j=new kj();
  
   
   public void paint(Graphics g) {
     g.drawRect(10, 10, 290, 290);
     g.drawLine(60, 10, 60, 300);
     g.drawLine(10, 60, 300,60);
     g.drawLine(120, 10, 120, 300);
     g.drawLine(10, 120, 300,120);
     g.drawLine(180, 10, 180,300);
     g.drawLine(240, 10, 240, 300);
     g.drawLine(10, 180, 300,180);
     g.drawLine(10, 240, 300,240);
     g.fillRect(60, 10, 60, 50);
     g.fillRect(10, 120, 50, 60);
     g.fillRect(180, 180, 60, 60);
     g.fillRect(120, 60, 60, 60);
     g.fillRect(240, 60, 60, 60);
     
     
   }
 }
 

mojdeh-eng

عضو جدید
کاربر ممتاز
من الان یک برنامه جدول گرافیکی دارم که بعضی از این خونه هاش سیاه شدن و من میخوام داخل خونه های سفید کارکتر بگذارم البته این کارکترها داخل فایل هستن مشکل من الن اینه که نمیدونم چطوری این دوتا رو بهم متصل کنم

کد:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.applet.*;
import java.io.*;
import javax.swing.*;
 public class proj extends java.applet.Applet {
  
  
    
  kj j=new kj();
  
   
   public void paint(Graphics g) {
     g.drawRect(10, 10, 290, 290);
     g.drawLine(60, 10, 60, 300);
     g.drawLine(10, 60, 300,60);
     g.drawLine(120, 10, 120, 300);
     g.drawLine(10, 120, 300,120);
     g.drawLine(180, 10, 180,300);
     g.drawLine(240, 10, 240, 300);
     g.drawLine(10, 180, 300,180);
     g.drawLine(10, 240, 300,240);
     g.fillRect(60, 10, 60, 50);
     g.fillRect(10, 120, 50, 60);
     g.fillRect(180, 180, 60, 60);
     g.fillRect(120, 60, 60, 60);
     g.fillRect(240, 60, 60, 60);
     
     
   }
 }
سلام....
من بیشتر با jframeکارکردم فکرنمیکنم کار سختی باشه اگه دستورات خواندن از فایل رو توی یه تابع جداگانه بنویسی میتونی با فراخوانی اون تابع هر دفعه یک کاراکتر از فایل را بخوانی و در یک متغییر تز نوع کاراکتر سیو کنی بعدهم اونو توی هر خونه از جدولت میخوایset کنی.....
موفق باشی
 

maryam-94

عضو جدید
سلام.می خواستم بدونم که متدpaintComponentبرای کلاس JPanelاست و این که وظیفش چیه؟
ممنون می شم که درمورد این متد بیشتر توضیح بدید....
 

Similar threads

بالا