نمایش نتایج 1 تا 12 از 12

نام تاپیک: ایجاد یک کلاس برای Statusbar

  1. #1
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163

    ایجاد یک کلاس برای Statusbar

    سلام. من یه کلاس برای statusbar نوشتم که کار میکنه ولی به نظرم یه مشکلی داره . چونکه وقتی که از فرم اصلی بهش پارامتر میدم هنوز اون پارامتر ها رو خالی نشون میده . من سورس این کلاس رو میذارم اینجا تا هم کاملترش کنیم و هم مشکل من حل بشه ( من یه تازه کارم ها ، ازش کم ایراد بگیرید. )

    سورس کلاس :

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    public class Cstatusbar extends JPanel {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    private JLabel lbl_username= null;
    private JLabel lbltimedate = null;
    private JLabel lblpersiandate= null;
    private String strpersiandate= null;
    private String stractiveuser= null;
    private String strsystemdatetime= null;
    private Cstatusbar Cstatusbar;

    public Cstatusbar() {
    super();
    super.setPreferredSize(new Dimension(100, 25));
    super.setLayout(new BorderLayout());
    super.setComponentOrientation(java.awt.ComponentOr ientation.RIGHT_TO_LEFT);

    getStatuspanel();
    }

    /* public void setParameters(String persianDate,String ActiveUser,String SystemDatetime) {
    strpersiandate = persianDate;
    stractiveuser =ActiveUser ;
    strsystemdatetime = SystemDatetime;
    }*/
    public void setusername(String username){
    stractiveuser =username ;
    }
    private String getusername() {
    return stractiveuser;
    }
    public void setPersianDate(String PersianDate){
    strpersiandate =PersianDate ;
    }
    private String getPersianDate() {
    return strpersiandate;
    }

    public void setSystemDateTime(String SystemDateTime){
    strsystemdatetime = SystemDateTime ;
    }
    private String getsystemdatetime() {
    return strsystemdatetime;
    }
    private Cstatusbar getStatuspanel() {

    lblpersiandate = new JLabel();
    lblpersiandate.setText(" امروز :" + this.getPersianDate());
    lblpersiandate.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
    lblpersiandate.setMaximumSize(new java.awt.Dimension(400,16));
    lblpersiandate.setPreferredSize(new java.awt.Dimension(400,16));
    lblpersiandate.setBorder(javax.swing.BorderFactory .createEtchedBorder(javax.swing.border.EtchedBorde r.LOWERED));
    lblpersiandate.setComponentOrientation(java.awt.Co mponentOrientation.RIGHT_TO_LEFT);
    lbltimedate = new JLabel();
    lbltimedate.setText("" + this.getsystemdatetime() + "");
    lbltimedate.setMaximumSize(new java.awt.Dimension(200,4));
    lbltimedate.setPreferredSize(new java.awt.Dimension(200,4));
    lbltimedate.setHorizontalAlignment(javax.swing.Swi ngConstants.CENTER);
    lbltimedate.setHorizontalTextPosition(javax.swing. SwingConstants.CENTER);
    lbltimedate.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
    lbltimedate.setBorder(javax.swing.BorderFactory.cr eateEtchedBorder(javax.swing.border.EtchedBorder.L OWERED));
    lbl_username = new JLabel();
    lbl_username.setText(" کاربر فعال :" + this.getusername() );
    lbl_username.setComponentOrientation(java.awt.Comp onentOrientation.RIGHT_TO_LEFT);
    lbl_username.setPreferredSize(new java.awt.Dimension(300,16));
    lbl_username.setMaximumSize(new java.awt.Dimension(200,16));
    lbl_username.setHorizontalAlignment(javax.swing.Sw ingConstants.RIGHT);
    lbl_username.setBorder(javax.swing.BorderFactory.c reateEtchedBorder(javax.swing.border.EtchedBorder. LOWERED));
    lbl_username.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
    super.add(lblpersiandate, java.awt.BorderLayout.WEST);
    super.add(lbltimedate, java.awt.BorderLayout.CENTER);
    super.add(lbl_username, java.awt.BorderLayout.EAST);

    return Cstatusbar;
    }

    }


    به صورت زیر هم ازش استفاده کردم :
    توی قسمت initComponents فرم اصلی نوشتم :

    statusbar statusbar = new Cstatusbar();

    statusbar.setusername(" بی نامم ");
    statusbar.setPersianDate(pcal.getIranianDate());
    statusbar.setSystemDateTime("dddd");
    getContentPane().add(statusbar, java.awt.BorderLayout.SOUTH);

    ممنون - بای ...

  2. #2
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163
    کسی نمی خواد کمک کنه ؟

  3. #3
    سلام
    من سوادم تو جاوا خیلی کمه اما خب شاید بدونم مشکلت چیه
    شما تو constructor کلاس Cstatusbar با صدا زدن متد getStatuspanel مقدارها رو ست کردین یه تناقضی اینجا هست وقتی از یک کلاس یک instance جدید new میکنین ( منظورم کدی که برای استفاده نوشتین ) هرچی تو constructor هست صدا زده میشه یعنی و label هایی که گذاشتین هم مقدار میگیرن یعنی مقدارشون رو null گرفتن و بعد از اون دیگه صدا زدن مثلا setusername فایده ای نداره و به جایی اثر نمیگذاره بنابراین یا باید setusername رو خوشگل تر کنین که مثلا تو متد setusername مقدار label مربوطه هم ست بشه. یا اینکه یک متد خارجی دیگه هم بنویسید که بعد از new شدن Cstatusbar و add شدنش صدا کنید مثلا با اجازت من متدی بنام applyStatusLabels تو کلاس Cstatusbar به شکل public اضافه کردم و بعد از add شدن Cstatusbar در فریم اصلی صداش زدم و درست شد .البته فکر کنم روش اول یعنی تغییر setusername اصولی تر باشه.
    یعنی به این شکل :

    public void setusername(String username){
    stractiveuser =username ;
    lbl_username.setText(stractiveuser);
    }



    این هم روش دوم :


    public void applyStatusLabels () {
    lbl_username.setText(" Current user :" + this.getusername() );
    lbltimedate.setText("" + this.getsystemdatetime() + "");
    lblpersiandate.setText(" Date :" + this.getPersianDate());
    }




    ...
    statusbar.applyStatusLabels()

  4. #4
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163
    جناب unhandled_event از کمک و توجهتون ممنون . من کد رو به این صورت اصلاح کردم و به نظرم درست شد. سورس اصلاح شده رو هم اینجا میذارم .اگه پایه باشین یه حال دیگه به سورس بدیم . حالا کمک کنین تو قسمت تاریخ میلادی و زمان ،یعنی قسمت وسطی، به کمک یه timer زمان رو هر ثانیه refresh کنیم ......

  5. #5
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163
    بازم سلام ...
    این سورس نهاییه که درست شد ، همونطور که گفتم حالا میخواهیم زمان هر ثانیه refresh بشه ، پس هر کی میتونه این کارو تو این کلاس بکنه کمک کنه تا درست شه ... ممنون.


    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.util.Date;
    import javax.swing.JLabel;
    import javax.swing.JPanel;

    public class Cstatusbar extends JPanel {

    private static final long serialVersionUID = 1L;
    private JLabel lbl_username= null;
    private JLabel lbltimedate = null;
    private JLabel lblpersiandate= null;
    private String strpersiandate= null;
    private String stractiveuser= null;
    private String strsystemdatetime= null;
    private Cstatusbar Cstatusbar;
    private static String MiladiDate ;


    public Cstatusbar(String Username,String IranianDate) {

    super();
    super.setPreferredSize(new Dimension(100, 25));
    super.setLayout(new BorderLayout());
    super.setComponentOrientation(java.awt.ComponentOr ientation.RIGHT_TO_LEFT);
    stractiveuser = Username;
    strpersiandate =IranianDate ;
    strsystemdatetime = MiladiDate;
    getStatuspanel();
    }

    private Cstatusbar getStatuspanel() {

    lblpersiandate = new JLabel();
    lblpersiandate.setText(" امروز :" + strpersiandate);
    lblpersiandate.setFont(new java.awt.Font("Tahoma", java.awt.Font.BOLD , 11));
    lblpersiandate.setMaximumSize(new java.awt.Dimension(300,16));
    lblpersiandate.setPreferredSize(new java.awt.Dimension(300,16));
    lblpersiandate.setBorder(javax.swing.BorderFactory .createEtchedBorder(javax.swing.border.EtchedBorde r.LOWERED));
    lblpersiandate.setComponentOrientation(java.awt.Co mponentOrientation.RIGHT_TO_LEFT);
    //================================================== ====================
    lbltimedate = new JLabel();
    Date now = new Date();
    lbltimedate.setText("" + now.toString());
    lbltimedate.setMaximumSize(new java.awt.Dimension(200,4));
    lbltimedate.setPreferredSize(new java.awt.Dimension(200,4));
    lbltimedate.setHorizontalAlignment(javax.swing.Swi ngConstants.CENTER);
    lbltimedate.setHorizontalTextPosition(javax.swing. SwingConstants.CENTER);
    lbltimedate.setFont(new java.awt.Font("Tahoma", java.awt.Font.BOLD, 11));
    lbltimedate.setBorder(javax.swing.BorderFactory.cr eateEtchedBorder(javax.swing.border.EtchedBorder.L OWERED));
    //================================================== ====================
    lbl_username = new JLabel();
    lbl_username.setText(" کاربر فعال : " + stractiveuser);
    lbl_username.setComponentOrientation(java.awt.Comp onentOrientation.RIGHT_TO_LEFT);
    lbl_username.setPreferredSize(new java.awt.Dimension(350,16));
    lbl_username.setMaximumSize(new java.awt.Dimension(350,16));
    lbl_username.setHorizontalAlignment(javax.swing.Sw ingConstants.RIGHT);
    lbl_username.setBorder(javax.swing.BorderFactory.c reateEtchedBorder(javax.swing.border.EtchedBorder. LOWERED));
    lbl_username.setFont(new java.awt.Font("Tahoma", java.awt.Font.BOLD, 11));

    super.add(lblpersiandate, java.awt.BorderLayout.WEST);
    super.add(lbltimedate, java.awt.BorderLayout.CENTER);
    super.add(lbl_username, java.awt.BorderLayout.EAST);

    return Cstatusbar;
    }


    }

  6. #6
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163
    این هم تصویر اونه statusbar هست . (قسمت وسط باید اصلاح بشه ).
    عکس های ضمیمه عکس های ضمیمه

  7. #7
    کاربر دائمی آواتار pooyanm
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    Esfahan - Iran
    پست
    567
    از javax.swing.Timer استفاده کن.

  8. #8
    سلام

    یک روش ر هم استفاده از یه کلاسیه بنام TimerTask که فکر کنم در واقع یک thread باشه.
    من یه inner class کوچیک درست کردم و براش یه متد run درست کردم و متدیه که سر زمانبندی خودش اتوماتیک اجرا میشه.
    اینطور که معلومه این کلاس TimerTask کاربردای زیادی داره از جمله زمانبندی یک کاری که قراره در فاصله های معین انجام بشه حتی طولانی در حد چند روز.
    بعد از کلاس DateFormat استفاده کردم برای فرمت کردن تاریخ که از تابع System.currentTimeMillis زمان رو تا حد میلی ثانیه برمیگردونه. این سریع ترین تابع تاریخ و زمانش باشه فکر کنم گرچه وقتی فاصله یک ثانیه است زیاد مهم نیست ضمنا یک ثانیه هم با عدد 1000 مشخص شده.
    این هم سورس کلاس (خود فرم اصلی هیچ تغییری نمیکنه) فقط مهمش اونجاست که label یی که قراره هر یک ثانیه refresh بشه
    باید به innerclass پاس بشه.
    Locale هم فکر میکنم میگه برای فارسی و ایران میخوام و DateFormat.ERA_FIELD هم جزو فرمتهای از پیش تعریف شده برای نمایش زمانه.



    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import java.util.*;
    import java.text.DateFormat;



    public class Cstatusbar extends JPanel {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    private JLabel lbl_username= null;
    private JLabel lbltimedate = null;
    private JLabel lblpersiandate= null;
    private String strpersiandate= null;
    private String stractiveuser= null;
    private String strsystemdatetime= null;
    private Cstatusbar Cstatusbar;
    private Timer tmrShowDateTime;


    public Cstatusbar() {
    super();
    super.setPreferredSize(new Dimension(100, 25));
    super.setLayout(new BorderLayout());
    super.setComponentOrientation(java.awt.ComponentOr ientation.RIGHT_TO_LEFT);
    getStatuspanel();
    tmrShowDateTime = new Timer ( ) ;
    tmrShowDateTime.scheduleAtFixedRate( new UpdateDateTime (lbltimedate) ,0,1000) ;

    }

    /* public void setParameters(String persianDate,String ActiveUser,String SystemDatetime) {
    strpersiandate = persianDate;
    stractiveuser =ActiveUser ;
    strsystemdatetime = SystemDatetime;
    }*/
    public void setusername(String username){
    stractiveuser =username ;
    lbl_username.setText(stractiveuser);
    }
    private String getusername() {
    return stractiveuser;
    }
    public void setPersianDate(String PersianDate){
    strpersiandate =PersianDate ;
    }
    private String getPersianDate() {
    return strpersiandate;
    }

    public void setSystemDateTime(String SystemDateTime){
    strsystemdatetime = SystemDateTime ;
    }
    private String getsystemdatetime() {
    return strsystemdatetime;
    }
    private void getStatuspanel() {

    lblpersiandate = new JLabel();
    lblpersiandate.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
    lblpersiandate.setMaximumSize(new java.awt.Dimension(400,16));
    lblpersiandate.setPreferredSize(new java.awt.Dimension(400,16));
    lblpersiandate.setBorder(javax.swing.BorderFactory .createEtchedBorder(javax.swing.border.EtchedBorde r.LOWERED));
    lblpersiandate.setComponentOrientation(java.awt.Co mponentOrientation.RIGHT_TO_LEFT);
    lbltimedate = new JLabel();
    lbltimedate.setMaximumSize(new java.awt.Dimension(200,4));
    lbltimedate.setPreferredSize(new java.awt.Dimension(200,4));
    lbltimedate.setHorizontalAlignment(javax.swing.Swi ngConstants.CENTER);
    lbltimedate.setHorizontalTextPosition(javax.swing. SwingConstants.CENTER);
    lbltimedate.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
    lbltimedate.setBorder(javax.swing.BorderFactory.cr eateEtchedBorder(javax.swing.border.EtchedBorder.L OWERED));
    lbl_username = new JLabel();
    lbl_username.setComponentOrientation(java.awt.Comp onentOrientation.RIGHT_TO_LEFT);
    lbl_username.setPreferredSize(new java.awt.Dimension(300,16));
    lbl_username.setMaximumSize(new java.awt.Dimension(200,16));
    lbl_username.setHorizontalAlignment(javax.swing.Sw ingConstants.RIGHT);
    lbl_username.setBorder(javax.swing.BorderFactory.c reateEtchedBorder(javax.swing.border.EtchedBorder. LOWERED));
    lbl_username.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
    super.add(lblpersiandate, java.awt.BorderLayout.WEST);
    super.add(lbltimedate, java.awt.BorderLayout.CENTER);
    super.add(lbl_username, java.awt.BorderLayout.EAST);

    }

    class UpdateDateTime extends TimerTask {
    JLabel DateTimeLabel;
    Locale locale;
    DateFormat dateFormatter;

    public UpdateDateTime (JLabel aLabel) {
    locale = new Locale("fa" , "IR");
    dateFormatter = DateFormat.getTimeInstance(DateFormat.ERA_FIELD,lo cale);
    DateTimeLabel = aLabel;

    }
    public void run ( ) {
    if (DateTimeLabel != null) {
    DateTimeLabel.setText(dateFormatter.format(System. currentTimeMillis()));

    }
    }
    }


    public void finalize () {
    tmrShowDateTime.cancel();
    }

    }









  9. #9
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163
    سلام به همه ومخصوصا به جناب که به قول خودش سواد جاواش کمه(البته فقط به قول خودش!). با کمک شایان این دوست عزیز و فعال ، این statusbar هم به سرانجام رسید .فقط یه سوال دیگه اینکه چراتوی خط
    DateTimeLabel.setText(dateFormatter.format(System. currentTimeMillis()));
    به من خطا میده ؟!!!

  10. #10

    این چرا حذف فایلهای ضمیمه نداره ؟

    خب دوتا پیام بالا رو بدلیل خراب بودن فایل zip ضمیمه مجبور شدم حذف کنم.

    ممنون لطف دارید فقط بعض پنجشنبه جمعه ها میشه از این تحقیقات کرد اون هم برای مشاغل دوم و سوم. من یکی دو ماه بیشتر نیست دارم با جاوا سروکله میزنم چندساله VB6 و VB.NET کار میکنم اما جاوا بهتر بوده. خدا این گوگل رو هم از ما نگیره

    خب چه خطایی ؟ چندتا احتمال :
    اول اگر خطای کامپایل میده ممکنه اون space های اضافی که ادیتور اینجا همش میندازه توش هنوز هست یعنی بین نقطه سیستم و current
    دوم fa رو در locale های ویندوز نداری که البته بعیده که این مساله وابسته به ویندوز باشه
    سوم اینکه خود فانکشن System. currentTimeMillis() رو بتنهایی اجرا کن یه عدد خیلی
    بزرگ میده اگر این کار رو بکنه پس با فرمت هم کار میکنه اگر کار نکرد یه مشکلی شاید با regional setting ویندوز هست نمیدونم (البته اینها همه زمانیه که شما با ویندوز کار میکنی نه لینوکس) من با ویندوز XP کار میکنم.
    و از مراجع خود سان برای آموزش کار کردن با فرمت هم زمان هم تاریخ و هم هردو چون هم getTimeInstance داره و هم getDateInstance
    منم از اونجا یاد گرفتم :
    http://java.sun.com/docs/books/tutor...dateintro.html
    روش ctrl-space در netbeans و سرچ چیزایی که میاره در گوگل میتونه کمک کنه.
    چهارم اینکه
    من تمام سورسها و کلاسها که کار میکنه رو ضمیمه میکنم
    فایل های ضمیمه فایل های ضمیمه

  11. #11
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163
    سلام . این خطا رو به من میده .
    عکس های ضمیمه عکس های ضمیمه

  12. #12
    سلام
    خب این نشون میده که احتمالا در ورژن کامپایلر جاوایی که IDE شما داره استفاده میکنه
    متد formatدر java.text.Format با این signature وجود نداره یعنی به این شکل :

    public final String format (Object obj)


    من از جاوای 1.6 و Netbeans 5.5.1 استفاده میکنم.

تاپیک های مشابه

  1. چگونه میشود فونت StatusBar را به دلخواه انتخاب نمود
    نوشته شده توسط naderigh در بخش Foxpro
    پاسخ: 3
    آخرین پست: دوشنبه 02 مهر 1386, 12:11 عصر
  2. statusbar با نمایش آخرین اطلاعات دیتابیس
    نوشته شده توسط shayan_delphi در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: جمعه 28 اردیبهشت 1386, 09:45 صبح
  3. کنترل Statusbar در mfc
    نوشته شده توسط حسین محمدی در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 0
    آخرین پست: دوشنبه 17 اردیبهشت 1386, 14:37 عصر
  4. طرز کار کردن با StatusBar
    نوشته شده توسط نعیم رضاییان در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: چهارشنبه 21 اردیبهشت 1384, 10:37 صبح
  5. قرار دادن تاریخ و زمان در statusbar
    نوشته شده توسط hamid_Sadeghian در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: جمعه 28 شهریور 1382, 21:58 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •