גודל חלון (java)

Metheny

Member
גודל חלון (java)

אני חדש בעניין של AWT וכל זה. איך אני מגדיר שחלון יהיה לו גודל מינימלי? נגיד אני רוצה לעשות חלון, ושלא יוכלו להקטין אותו מתחת לגודל מסויים. ניסיתי כל מיני דברים וזה לא הלך, כנראה שאני טועה במשהו. בתוך החלון, אני צריך שיהיה לי JPanel ו- JLabel. כעיקרון עשיתי משהו כזה:
class MyWindow extends JFrame { public MyWindow (MyPanel panel) { getContentPane().add (panel, "Center") ; JLabel label = new JLabel ("text") ; getContentPane().add (label ,"North") ; pack() ; } public static void main (String[] args) { MyWindow window = new MyWindow (new MyPanel() ) ; window.setVisible(true) ; window.repaint();} class MyPanel extends JPanel { public MyPanel () { this.setSize (new Dimension(800, 600)); } }​
הבעייה היא שהחלון שנפתח בהתחלה, נפתח רק בגודל של ה- JLabel. כתבתי בקונסטרקטור של MyPanel שהגודל שלו יהיה 800 על 600. ואחרי שהוספתי אובייקט של MyPanel לאובייקט window, ועשיתי pack , הוא כאילו התעלם מהגודל שהגדרתי. במה טעיתי?
 

neko

New member
רעיון: תעשה משהו בסגנון:

if (compare(this.getSize.width, 800)>0) this.setSize (new Dimension(800, this.getSize.height)); if (compare(this.getSize.height, 600)>0) this.setSize (new Dimension(this.getSize.width, 600));​
סתם רעיון, אבל אני מניח שזה יעבוד. יכול להיות שיש לך גם אופציה ל SETMINIMUMSIZE או משהו כזה.
 

roterl

New member
זה תלוי עם איזה layout אתה עובד

בכל layout גודל החלון נקבע אוטומטית לפי הצרכים של ה layout. כדי "לעקוף" זאת פשוט תקבע את גודל החלון לפני בפתיחה שלו. כלומר בדוגמה שלך: public static void main (String[] args) { MyWindow window = new MyWindow (new MyPanel() ); window.setSize(new Dimension(800, 600)); window.setVisible(true) ; } כדי לקבוע גודל מינימום - כלומר שלא יהיה ניתן להקטין את החלון יקטן יותר (ע"י משתמש - קריאה לפונ' setsize תמיד מאפשרת שינוי): window.setMinimumSize(new Dimension(800, 600));
 

Metheny

Member
אבל

הבעייה היא שאין ל-JFrame פונקציה setMinimumSize, אחרת הייתי משתמש בה.
 

Metheny

Member
לא הבנתי...

מה זתומרת להשתמש בפאנל בתוכו? אני כבר משתמש בפאנל בפנים, אבל לא הבנתי איך זה קשור לגודל המינימלי של החלון?
 

roterl

New member
לפאנל יש מטודה: setMinimumSize

אם הפאנל לא יכול להיות קטן יותר, אז מן הסתם גם ה frame לא...
 

roterl

New member
תיקון - זה לא עובד... ../images/Emo13.gif

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

voguemaster

New member
אתה יכול להעלות את הקוד שלך ?

מאוד מעניין אותי לדעת את הפרטים (כמו ה-LAYOUT וכד')..
 

roterl

New member
אין לי קוד כזה כאן, וכמו שאמרתי לא

עבדתי אם זה יותר מידי אבל יש event שנקרא componentResized שמופעל כאשר שינו שינוי בגודל, זה צריך להיות משהו כזה:
this.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(ComponentEvent e) { this_componentResized(e); } }); } void this_componentResized(ComponentEvent e) { //Frame resized - do what ever you need to.. }​
 

voguemaster

New member
אתה יכול להעלות את הקוד שלך ?

מאוד מעניין אותי לדעת את הפרטים (כמו ה-LAYOUT וכד')..
 
למעלה