中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java?Swing的層次結構怎么理解

發布時間:2021-12-06 09:03:48 來源:億速云 閱讀:260 作者:iii 欄目:開發技術

這篇文章主要介紹“Java Swing的層次結構怎么理解”,在日常操作中,相信很多人在Java Swing的層次結構怎么理解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java Swing的層次結構怎么理解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    Java Swing的層次結構

    什么是Java Swing

    Swing 是一個用于開發Java圖形界面應用程序的開發工具包,它是以抽象窗口工具包(AWT:Abstract Window Toolkit)為基礎,使跨平臺應用程序可以使用任何可插拔的外觀風格。

    通常把AWT控件稱為重量級控件,而把Swing控件稱為輕量級控件。

    Swing組件的層次結構

    Java?Swing的層次結構怎么理解

    Swing組件可以分成兩種類型,一種是JComponent類,另一種是Window類。兩者的區別是JComponent組件類主要包括一些不能獨立顯示的組件(即必須依賴于中間容器才能顯示),而Window組件類主要包括了一些可以獨立顯示的組件。鑒于此,可以講Swing的組件分為三種類型:頂層組件、中間組件、基本組件,如下圖:

    Java?Swing的層次結構怎么理解

    頂層容器(即Window組件):JFrame、JApplet、JDialog、JWindow;

    • 中間容器:JPanel、JScrollPane、JSplitOPane、JToolBar;這些容器可以充當載體,但也是不可以獨立顯示的組件,必須依附在頂層容器內;

    • 特殊容器:在GUI上起特殊作用的中間層,如JInternalFrame、JLayeredPane等;

    • 基本組件:實現人機交互的組件,如JButton、JComboBox、JList、JMenu、JTextField。

    關于三層組件

    1、當進行圖形編程時,需要一個能夠提供圖形繪制的容器(即頂層容器),可以將它想象稱為一個窗口,它是進行圖形編程的基礎,一切圖形的東西都必然包括在頂層容器中。

    2、可以作為頂層容器的三種組件:

    • JFrame:類似于Windows系統中窗口形式的應用程序;

    • JDialog:和JFrame類似,用于設計對話框;

    • JApplet:用于設計可以嵌入在網頁中的小程序。

    3、基于Swing的圖形界面至少要有一個頂層容器,每一個頂層容器都有一個內容面板,同時可以為頂層容器添加菜單組件。

    剩下的便是向內容面板或菜單組件中添加一些基本組件,這些組件的使用相對簡單,其中JTree和JTable較難。

    Java Swing基礎(層次結構,組件,布局管理)

    Swing基礎層次結構

    圖形環境和圖形對象

    • 坐標

    GUI組件的左上角坐標默認為(0,0)

    從左上角到右下角,水平坐標x和垂直坐標y增加

    坐標的單位是像素

    • Graphics對象

    專門管理圖形環境,Graphics類是一個抽象類

    抽象類Graphics提供了一個于平臺無關的繪圖接口

    各平臺上實現的Java系統將創建Graphics類的一個子類來實現繪圖功能,這個子類對程序員是透明的。

    在執行paint方法時,系統會傳遞一個指向特定平臺的Graphics子類的圖形對象g

    一個簡單的例子

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    public class GraphicsTester extends JFrame{
        private static final long serialVersionUID = 1L;
        public GraphicsTester()
        {
            super("演示字體、顏色、繪圖");
            setVisible(true);
            setSize(480,250);
        }
        public void paint(Graphics g)
        {
            super.paint(g);
            g.setFont(new Font("SansSerif",Font.BOLD,12));
            g.setColor(Color.blue);
            g.drawString("字體ScanSerif,粗體,14號,紅色",250,50);    
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            GraphicsTester g = new GraphicsTester();
            g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        }
    }

    上面的程序需要注意三處代碼

    public class GraphicsTester extends JFrame

    我們需要繼承一個主窗口,才能實現swing編程

    public void paint(Graphics g)

    這里的Graphics g不用我們自己定義,是由Java自動生成的

    g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

    設置關閉窗口的默認操作

    注意: paint方法會被自動調用

    其他的畫圖函數看API文檔就可以了

    前面我們使用的是Graphics來繪圖,其實我們可以用更強大的Graphics2D來繪圖,當然,我們需要將傳遞進來的g向上轉型為Graphics2D,因為傳遞過來的g就是Graphics2D的一個子類

    Graphics2D g2d = (Graphics2D)g;

    Swing 基礎

    swing:一個預定好各種組件的包,JFrame就是swing里面的一個組件

    JFC與Swing

    JFC(Java Foundation Classes)

    • 是關于GUI組件和服務的完整集合

    • 作為JAVA SE的一個有機部分,主要包含5個部分

    AWT

    Java2D

    Accessibility

    Drag & Drop

    Swing

    • Swing

    • JFC的一部分

    • 提供按鈕、窗口、表格等所有的組件

    • 純Java組件(完全用Java寫的組件)

    AWT組件
    • 在Java.awt包里,包括Button、Checkbox、Scrollbar等,都是Component類的子類

    • 大部分含有native code,所以隨操作系統平臺的不同會顯示出不同的樣子,而不能進行更改,是重量級的組件

    Swing組件
    • 其名稱都是在原來的AWT組件名稱前加上J,例如JButton、JCheckBox、JScrollbar等,都是JComponent類的子類

    • 架構在AWT上,是AWT的擴展而不是取代

    • 完全由Java語言編寫,其外觀和功能不依賴于任何由宿主平臺的窗口系統所提供的代碼,是輕量級組件

    • 可提供更豐富的視覺感受

    在Applet和Application中應用Swing
    • 在Applet中應用Swing,就要將Swing組件加載到Applet容器上(通常是JApplet),這通常在init方法中完成

    • 在Application(本地應用程序,也就是主函數中)中應用Swing,也是要將Swing組件加載到這個Application的頂層容器(通常是JFrame)中。

    也就是說,如果要使用Swing組件,就要加到容器上

    容器是從哪里來的?容器又是什么?

    Swing層次

    Java?Swing的層次結構怎么理解

    組件的繼承層次如上,大多數Swing組件都繼承于JComponent

    • Component類

    包含paint、repaint方法,可以在屏幕上繪制組件

    大多數GUI組件直接或間接的擴展Component

    • Container類

    容納相關組件

    包括add方法,用來添加組件

    包括setLayout方法,用來設置布局,幫助Container對象對其中的組件進行定位和設置組件大小

    • JComponent類–多數Swing組件的超類

    可定制的觀感、即可根據需求定制組件

    快捷鍵(通過鍵盤直接訪問GUI組件)

    一般的事件處理功能

    Swing的組件和容器層次
    • 頂層容器

    必須跟操作系統打交道,所以都是重量級組件、

    每個使用Swing組件的Java程序都必須至少由一個頂層容器,別的組件都必須放在這個頂層容器上才能顯示出來)

    JFrame實現單個主窗口

    JDialog 實現一個二級窗口

    JApplet在瀏覽器窗口實現一個applet顯示區域

    • 中間層容器

    容納其他組件的

    • 原子組件

    直接與用戶交互的組件

    例:三層容器結構

    package swing;
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.JFrame;
    public class ComponentTester {
        @SuppressWarnings("deprecation")
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            JFrame.setDefaultLookAndFeelDecorated(true);
            JFrame frame = new JFrame("Swing Frame");
            Container contentPane=frame.getContentPane();
            JPanel panel = new JPanel();
            panel.setBorder(BorderFactory.createLineBorder(Color.black, 5));
            panel.setLayout(new GridLayout(2,1));
            JLabel label = new JLabel("Label",SwingConstants.CENTER);
            JButton button = new JButton("Button");
            panel.add(label);
            panel.add(button);
            contentPane.add(panel);
            frame.pack();
            frame.show();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
        }
    }

    分析一下關鍵部分的代碼

    首先,需要一個頂層容器,然后從容器得到一個內容面板Container

    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("Swing Frame");
    Container contentPane=frame.getContentPane();

    接下來,定義一個中間容器并完成一些初始化操作

    JPanel panel = new JPanel();
    panel.setBorder(BorderFactory.createLineBorder(Color.black, 5));
    panel.setLayout(new GridLayout(2,1));

    定義一些原子組件

    JLabel label = new JLabel("Label",SwingConstants.CENTER);
    JButton button = new JButton("Button");

    最后一步,將原子組件加在中間層容器,然后將中間層容器加到頂層容器上

    panel.add(label);
    panel.add(button);
    contentPane.add(panel);

    以上就是Swing組件的基本層次結構了

    布局管理

    使用方法: 調用容器的setLayout方法就可以了

    例如:

    Container contentPane = frame.getContentPane();
    ContentPane.setLayout(new FlowLayout());

    其中的FlowLayout是布局管理器對象

    有許多常用的布局管理器類,直接查找API文檔就可以了

    到此,關于“Java Swing的層次結構怎么理解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    景谷| 屏边| 台安县| 四会市| 梁平县| 蒲江县| 自治县| 高雄市| 神木县| 紫金县| 崇明县| 福海县| 南华县| 栖霞市| 合肥市| 广汉市| 房产| 安丘市| 汾西县| 阿合奇县| 宁都县| 泾阳县| 无锡市| 荆州市| 剑阁县| 汕头市| 隆回县| 山丹县| 岳普湖县| 武清区| 孙吴县| 莱西市| 胶南市| 沛县| 新巴尔虎右旗| 新田县| 个旧市| 揭阳市| 平远县| 宜春市| 重庆市|