» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
חלקי קוד מעניינים
דף ראשי  מתקדמים  Swing, הבנת ()getContentPane ושכבות Jframe אחרות  תוכנית דוגמא  חלקי קוד מעניינים גרסה להדפסה

חלקי קוד מעניינים

 

נתחיל עם הצהרות חשובות אשר מדגישות את הדרישה לייבא חבילות Swing.

 

import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.*;


כפי שתוכל לראות בחלק הבא, מחלקת השליטה בתוכנית זו היא אובייקט מסוג Jframe 
מכיוון  שהיא מרחיבה את
Jframe. חלק זה גם מכריז על מספר משתנים של אובייקטים הנדרשים מאוחר יותר במטפל אירוע פעולה על מנת להחליף את שני הכפתורים בין השכבות.

בנוסף כללתי פונקצית main() בחלק זה על מנת לספק רצף.

class SwingPane01 extends JFrame{//subclass JFrame
   JLayeredPane theLayeredPane;
JButton greenButton;
  JButton yellowButton;
 public static void main(String[] args){
    new SwingPane01();
  }//end main

 

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

 

  SwingPane01(){//constructor
    theLayeredPane = this.getLayeredPane();
    int frameWidth = 300;
    int frameHeight = 200;

 

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

 

    System.out.println("Root pane is: " + 
                            this.getRootPane().getClass());
    System.out.println("Parent of root pane is " + 
                    this.getRootPane().getParent() + "\n");

    System.out.println("Glass pane is: " + 
                           this.getGlassPane().getClass());
    System.out.println("Parent of glassPane is " + 
                   this.getGlassPane().getParent() + "\n");

    System.out.println("Layered pane is: " + 
                         this.getLayeredPane().getClass());
    System.out.println("Parent of layeredPane is " + 
                 this.getLayeredPane().getParent() + "\n");
                         
    System.out.println("Content pane is: " + 
                         this.getContentPane().getClass());
    System.out.println("Parent of contentPane is " + 
                 this.getContentPane().getParent() + "\n");


החלק בהא מאתחל אובייקט
Jlabel ואובייקט JtextField וממקם אותם על ה- contentPane.
מנהל מחדל התצוגה עבור
contentPane הוא BorderLayout. קוד זה ממקם את JtextField האדום במיקום מרכזי של ה- contentPane וממקם את ה-Jlabel במיקום דרומי.

עבור L&F   מטאלי, ה- Jlabel מוצג כאפור ונראה כחלק מהגבול בתחתית אובייקט ה- Jframe.

ה- Jlabel הדרומי מספק הוראות לגבי השימוש באובייקטים של Jbutton אשר ימוקמו על אובייקט
ה-
Jframe.

 

    JLabel theLabel = new JLabel(
         "  Click buttons to swap their layer positions.");
    this.getContentPane().add(theLabel,"South");
    
    JTextField redTextField = new JTextField(
                        "    redTextField on contentPane");
    redTextField.setBackground(Color.red);
    this.getContentPane().add(redTextField,"Center");


החלק הבא מאתחל אובייקט
Jbutton ירוק וממקם אותו על ה- layeredPane בשכבה
מספר אחת (1).
שים לב שיש שימוש בפונקצית setBounds() על מנת לבסס את המיקום והגודל של הכפתור בקואורדינטות יסודות תמונה אבסולוטיות. 
תיזכר שאמרתי קודם שמסתבר שמנהל מחדל התצוגה עבור
layeredPane  הוא אפס.
אחרת, היה צורך עבורי לכוונו לאפס לפני השמת אובייקט זה על בסיס מיקום וגודל אבסולוטי.

שים לב שמאזין פעולה רשום על אובייקט ה- Jbutton. נראה את המחלקה המגדירה את התנהגות אובייקט המאזין מאוחר יותר.

 

    greenButton = new JButton(
                            "greenButton on Layered Pane");
    greenButton.setBackground(Color.green);
    greenButton.setBounds(10,10,240,40);
    greenButton.addActionListener(new MyActionListener());
    theLayeredPane.add(greenButton,new Integer(1));

כעת נאתחל אובייקט
Jbutton צהוב ונמקם אותו ב- layeredPane  שכבה מספר 29999-.
זוהי השכבה התחתונה ביותר מכל השכבות האפשריות ב-
layeredPane. ה- contentPane
נופל ישירות מתחת לשכבה זו.

 

    yellowButton = new JButton(
                           "yellowButton on Layered Pane");
    yellowButton.setBackground(Color.yellow);
    yellowButton.setBounds(40,20,240,40);
    yellowButton.addActionListener(new MyActionListener());
    theLayeredPane.add(yellowButton,new Integer(-29999));

אחר כך, נכוון כותרת, גודל, ראות, וכ"ו, של אובייקט ה-
Jframe ונרשום מאזין אנונימי
על מנת לסיים את התוכנית כאשר המשתמש סוגר את ה-
Jframe. וזה מסיים את הבנאי.

 

    this.setTitle("Copyright 1998, R.G.Baldwin");
    this.setSize(frameWidth,frameHeight);
    this.setVisible(true);
    //===================================================//

    //Anonymous inner class to terminate program.
    this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
          System.exit(0);}});//end addWindowListener
          
  }//end constructor


לבסוף, נראה מחלקת מאזין פעולה ממנה אובייקטים מאזינים נרשמים על שני האובייקטים של
Jbutton. זוהי מחלקת מאזין סטנדרטית אשר מגדירה את פונקצית actionPerformed().

התנהגות פונקצית actionPerformed() היא במקרה זה לגרום למיקומי השכבות של שני האובייקטים של ה- Jbutton להתחלף בכל פעם שהכפתור העליון נלחץ. זה גורם לאובייקט ה- Jbutton הנמצא בדיוק מתחת לאובייקט העליון לעבור לראשית המחסנית.

שים לב שפונקציה זו מעוררת את פונקצית setLayer() של מחלקת JlauyeredPane לסדר מחדש את מיקומי שני האובייקטים מסוג Jbutton בזמן ההרצה.

  class MyActionListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
      if(e.getActionCommand().equals(
                           "greenButton on Layered Pane")){
        theLayeredPane.setLayer(greenButton,-29999);
        theLayeredPane.setLayer(yellowButton,1);
      }else{
        theLayeredPane.setLayer(greenButton,1);
        theLayeredPane.setLayer(yellowButton,-29999);
      }//end else
    }//end actionPerformed()
  }//end class MyActionListener

 

 08-12-03 / 21:04  עודכן ,  18-10-03 / 00:10  נוצר ע"י רונית רייכמן  בתאריך 
 תוכנית דוגמא - הקודםהבא - רישום תוכנית 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 6