PANEL וTHREAD - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

PANEL וTHREAD


ה*לה

Recommended Posts

יש לי תכנית המדמה שעון דיגיטלי. <יש שעון פנימי שאחרי SLEEP של שניה מעדכן את הזמן (שניה מייצגת דקה, דקה מייצגת שעה- כל שישים שניות מתחלפת דקה)>

המשתמש יכול לכוון את השעון-

אם הוא מכניס קלט 0 אז הוא מגיע למצב של כיוון הדקות אם הוא יכניס קלט 1 הוא יכול לקדם את הדקה (כדי להגיע לזמן הרצוי לו).

אם יכניס שוב קלט 0 הוא יגיע למצב של כיוון השעה ואז על ידי הכנסת קלט 1 הוא יוכל לקדם את השעות עד השעה הרצויה לו.

אם יכניס שוב קלט 0 הוא יגיע למצב התתחלתי. <אם במצב הזה מכניס קלט 1- לא קורה כלום.>

אני צריכה ליצור לשעון הזה ממשק גרפי .

יש לי FRMAE עם PANEL שמתקדם לפי הזמן- כמו שצריך.

כדי להסתדר עם הקלט שהמשתמש יכניס הוספתי שני כפתורים MODE עבור מה שצריך להיות קלט 0 ו SELECT עבור מה שצריך להיות קלט 1 אבל -איך אני מסתדרת עם הACTIONLISTENER שלהם???

זו התכנית עד עכשיו:

CLASS לייצוג שעון:


public class Clock
{
int hour;
int minute;
String time;

public Clock()
{
hour = 0;
minute = 0;
}

public Clock (Clock cl)
{
hour = cl.hour;
minute = cl.minute;
}

public String print()//הדפסת השעה
{
if(hour<10)
{
if(minute<10)
{
time = "0"+hour+":0"+minute;
}
else
{
time = "0"+hour+":"+minute;
}
}
else
{
if(minute<10)
{
time = hour+":0"+minute;
}
else
{
time = hour+":"+minute;
}
}

System.out.println(time);

return time;
}
}

CLASS המכיל את הפונקציות של השעון:


public class Time
{
Clock timeClock;

public Time()
{
timeClock = new Clock(); }
public synchronized Clock getTimeClock()
{
return timeClock; }
public synchronized int getHourTimeClock()
{
return timeClock.hour; }
public synchronized int getMinuteTimeClock()
{
return timeClock.minute; }
public synchronized String DisplayTimeClock()
{
return timeClock.print(); }
public synchronized void kivunHourTimeClock()
{
if(timeClock.hour==23)
{
timeClock.hour=0; }
else
{
timeClock.hour++; }
}
public synchronized void kivunMinuteTimeClock()
{
if(timeClock.minute==59)
{
timeClock.minute=0;
kivunHourTimeClock(); }
else
{
timeClock.minute++; }
}

[br]פורסם בתאריך: 12.02.2007 בשעה 20:16:11


-המשך-

CLASS לכיוון השעון:


public class Kivun extends Thread
{
Event64 mode, select, stop;
Time clock;
int ection = 0;

public Kivun(Event64 m, Event64 s, Event64 st, Time shaon)
{
mode = m;
select = s;
stop = st;
clock = shaon;

start();
}

public void run()
{
while(true)
{
switch(ection)
{
case 0:
{
while(true)
{
if(mode.arrivedEvent())
{
mode.waitEvent();
System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun hour time: ");

clock.DisplayTimeClock();
ection = 1;
break;
}
else
if(select.arrivedEvent())
{
select.waitEvent();
System.out.println("Enter 0 for continue: ");

clock.DisplayTimeClock();
ection = 0;
break;
}

else
if(stop.arrivedEvent())
{
stop.waitEvent();

System.out.println("end of ection");
System.out.println("Enter 0 for continue: ");

ection = 0;

break;
}
}
break;
}

case 1:
{
while(true)
{
if(mode.arrivedEvent())
{
mode.waitEvent();
System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun minute time: ");

clock.DisplayTimeClock();
ection = 2;
break;
}
else
if(select.arrivedEvent())
{
select.waitEvent();

clock.kivunHourTimeClock();
clock.DisplayTimeClock();

System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun hour time: ");

break;
}
else
if(stop.arrivedEvent())
{
stop.waitEvent();

System.out.println("end of ection");
System.out.println("Enter 0 for continue: ");

ection = 0;

break;
}
}
break;
}

case 2:
{
while(true)
{
if(mode.arrivedEvent())
{
mode.waitEvent();
System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun hour Alarm time: ");


clock.DisplayTimeClock();
ection = 3;
break;
}
else
if(select.arrivedEvent())
{
select.waitEvent();

clock.kivunMinuteTimeClock();
clock.DisplayTimeClock();

System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun minute time: ");

break;
}
else
if(stop.arrivedEvent())
{
stop.waitEvent();

System.out.println("end of ection");
System.out.println("Enter 0 for continue: ");

ection = 0;

break;
}
}
break;
}

case 3:
{
while(true)
{
if(mode.arrivedEvent())
{
mode.waitEvent();
System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun minute Alarm time: ");


clock.DisplayTimeAlarm();
ection = 4;
break;
}
else
if(select.arrivedEvent())
{
select.waitEvent();

clock.kivunHourTimeAlarm();
// clock.DisplayTimeAlarm();

System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun hour Alarm time: ");

break;
}
else
if(stop.arrivedEvent())
{
stop.waitEvent();

System.out.println("end of ection");
System.out.println("Enter 0 for continue: ");

ection = 0;

break;
}

}
break;
}

case 4:
{
while(true)
{
if(mode.arrivedEvent())
{
mode.waitEvent();

System.out.println("The AlramClock be off");
System.out.println("");
System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun hour time: ");

ection = 1;
break;
}
else
if(select.arrivedEvent())
{
select.waitEvent();

clock.kivunMinuteTimeAlarm();
// clock.DisplayTimeAlarm();

System.out.println("Enter what do you want to do- " +
"0 for continue, 1 for kivun minute Alarm time: ");

break;

}
else
if(stop.arrivedEvent())
{
stop.waitEvent();

System.out.println("end of ection");
System.out.println("Enter 0 for continue: ");

ection = 0;

break;
}
}
break;
}

}
}
}
}

CLASS שעון פנימי:


public class TikTak extends Thread implements ActionListener
{
Time t;
JFrame f;
JPanel panel, center, south;
JLabel showtime;
JButton mode, select;
TextField displayezer;

public TikTak(Time cl)
{
t=cl;
f = new JFrame("clock");
f.setSize(300, 210);

panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.green);

showtime = new JLabel();
showtime.setFont(new Font("Helvectica",Font.PLAIN, 65));

displayezer = new TextField(5);
displayezer.setBackground(Color.yellow);
displayezer.setFont(new Font("Helvectica",Font.PLAIN, 18));
displayezer.setEditable(false);

center = new JPanel();
center.setLayout(new BoxLayout(center,BoxLayout.Y_AXIS));
center.setBackground(Color.green);
center.add(showtime);
center.add(Box.createRigidArea(new Dimension (8,0)),BorderLayout.WEST);
center.add(displayezer);

mode = new JButton("mode");
mode.addActionListener(this);
select = new JButton("select");
select.addActionListener(this);

south = new JPanel();
south.setLayout(new FlowLayout());
south.setBackground(Color.green);
south.add(mode);
south.add(select);


panel.add(center, BorderLayout.CENTER);
panel.add(south, BorderLayout.SOUTH);

f.add(panel);
f.setVisible(true);

start();
}

public void run()
{
while(true)
{
showtime.setText(t.DisplayTimeClock());
try
{
sleep(500);
}
catch(InterruptedException exce) {};

t.kivunMinuteTimeClock();
}
}

public void actionPerformed(ActionEvent ev)
{
if(ev.getSource()==mode)
{
????
}
if(ev.getSource()==select)
{
???
}
}
}

EVENT64 שולח ומקבל הודעות.

אני צריכה להציג את כיון השעה בתצוגה משנית ורק לאחר שסיימתי לעדכן את השעון .

איך אני יוצרת שהכפתורים יקדמו את השעון????

קישור לתוכן
שתף באתרים אחרים

  • תגובות 54
  • נוצר
  • תגובה אחרונה

משתתפים בולטים בדיון

משתתפים בולטים בדיון

את צריכה לבנות מכונת מצבים פשוטה:

מצב התחלתי -> מצב כיוון דקות -> מצב כיוון שעות -> מצב התחלתי

במצב כיוון דקות ומצב כיוון שעות את מציגה את התצוגה המשנית. במצבים האלו לחיצה על כפתור SELECT תשנה את הערך המתאים.

את המצב הנוכחי תשמרי בתור משתנה ולפי הערך שלו תקבעי מה לעשות עם הלחיצות על SELECT.

את התצוגה תעדכני במעברים בין המצבים.

זהו, פשוט וקל.

דותן

קישור לתוכן
שתף באתרים אחרים

חן חן על העידוד שזה פשוט וקל.

בעקרון התכנית עובדת כשהמשתמש מכניס קלט אני צריכה לבנות ממשק גרםי שבמקום להכניס קלט המשתמש ילחץ על BUTTON.

מה שהסתבכתי הוא ביצירת מאזינים לכפתורים איך אני מקשרת בין הCLASSים שתתבצע אותה הפעולה בלחיצת כפתור כמו בהכנסת בקלט?

קישור לתוכן
שתף באתרים אחרים

אפשר לחשוב על כמה פתרונות לעניין הזה. הנה אחד מהם, ה- ActionListener שלך צריך לדעת באיזה מצב המערכת נמצאת (דהיינו האם זה מצב קידום דקות, מצב קידום שעות או מצב כללי).

לשם כך תוכלי להעביר לאובייקטים האלה את אובייקט ה-MODEL או לאחד את ה-MODEL עם ה-CONTROLLER.

פסאודו קוד של האובייקט שיטפל בלחיצות על כפתור מוד:

1. אם המערכת במצב כללי:

עבור למצב עריכת דקות

הצג תצוגה משנית

חזור

2. אם המערכת במצב עריכת דקות:

עבור למצב עריכת שעות

חזור

3. אם המערכת במצב עריכת שעות:

הסתר תצוגה משנית

עבור למצב כללי

חזור

פסאודו קוד של האובייקט שיטפל בכפתור SELECT:

1. אם המערכת במצב כללי

חזור

2. אם המערכת במצב קידום דקות

קדם את מונה הדקות באחד

חזור

3. אם המערכת במצב קידום שעות

קדם את מונה השעות באחד

חזור

כאמור, שני האובייקטים האלו יכולים להכיל רפרנס ל-MODEL או להיות ה-MODEL בעצמו.

כמו שזה נראה לי נחוצות פה כמה מחלקות:

1. מחלקה שתממש את ה-MODEL ותכיל את הלוגיקה של קידום השעון באופן אוטומטי וע"י קלט של המשתמש, המחלקה גם תכיל את מצב המערכת הנוכחי ותכיל פונקציות לשינוי מצב המערכת, קידום הדקות באחד וקידום השעות באחד

2. 2 ACTION LISTENER אחד עבור כפתור ה-MODE והשני עבור כפתור ה-SECLECT שתיהן יכילו רפרנס ל-MODEL

3. מחלקה שתצייר את הפאנל כולל התצוגה הראשית, המשנית והכפתורים - תכיל פונקציות להצגה והסתרה של התצוגה המשנית

אם את ממש חרוצה אפשר גם לעשות DISABLE לכפתור של ה-SELECT שהמערכת לא נמצאת במצב שמאפשר את זה.

דותן

קישור לתוכן
שתף באתרים אחרים

הסתבכתי.

אני מעוניינת שהשעון ימשיך לדפוק כמו שצריך ותוך כדי אני אכוון שעון עזר ואז אעדכן את השעון הדופק.

יש לי case 0 כניסה למצב כיוון שעון.

case 1 כיוון דקות: אם אני לוחצת על mode אני עוברת לcase הבא, ואם על select אני מכוונת את הדקות של השעון עזר.

case 2 כיוון שעות: אם אני לוחצת על mode אני עוברת מסיימת את תהליך הכיוון (צריכה להציג את השעה שכיוונתי את השעון עזר בשעון הראשי בshowtime), ואם על select אני מכוונת את השעות של השעון עזר.

הבעיה שלי: כשאני עוברת לcase 2 השעון עזר מתעדכן לי לפי השעה של השעון הראשי (שהמשיך לדפוק) ואני רוצה שישאר כמו שהיה בcase הקודם.

מה לתקן?


public void actionPerformed(ActionEvent e)
{
switch(ection)
{
case 0:
{
if(e.getSource()==mode)
{
offer.setText("Enter mode to begining. ");

select.setEnabled(true);
ection = 1;
i=0;
}
break;
}

case 1:
{
if(e.getSource()==mode)
{
i = 0;
offer.setText("Enter mode for continue, select for kivun minute time: ");

kivnclock = t;
showtime.setForeground(Color.WHITE);
displayezer.setText(kivnclock.DisplayTimeClock());
ection = 2;
}
else
if(e.getSource()==select)
{
kivnclock.kivunMinuteTimeClock();
displayezer.setText(kivnclock.DisplayTimeClock());

offer.setText("Enter mode for continue, select for kivun minute time: ");
}
break;
}

case 2:
{
if(e.getSource()==mode)
{
offer.setText("Enter mode for continue, select for kivun hour time: ");

displayezer.setText(kivnclock.DisplayTimeClock());
ection = 0;
}
else
if(e.getSource()==select)
{
kivnclock.kivunHourTimeClock();
displayezer.setText(kivnclock.DisplayTimeClock());

offer.setText("Enter mode for finish, select for kivun hour time: ");
}
break;
}


קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...