最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?Swing的層次結(jié)構(gòu)深入理解

 更新時(shí)間:2021年12月04日 15:57:47   作者:linhai921371165  
這篇文章主要介紹了Java?Swing的層次結(jié)構(gòu)深入理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java Swing的層次結(jié)構(gòu)

什么是Java Swing

Swing 是一個(gè)用于開發(fā)Java圖形界面應(yīng)用程序的開發(fā)工具包,它是以抽象窗口工具包(AWT:Abstract Window Toolkit)為基礎(chǔ),使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。

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

Swing組件的層次結(jié)構(gòu)

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

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

  • 中間容器:JPanel、JScrollPane、JSplitOPane、JToolBar;這些容器可以充當(dāng)載體,但也是不可以獨(dú)立顯示的組件,必須依附在頂層容器內(nèi);
  • 特殊容器:在GUI上起特殊作用的中間層,如JInternalFrame、JLayeredPane等;
  • 基本組件:實(shí)現(xiàn)人機(jī)交互的組件,如JButton、JComboBox、JList、JMenu、JTextField。

關(guān)于三層組件

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

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

  • JFrame:類似于Windows系統(tǒng)中窗口形式的應(yīng)用程序;
  • JDialog:和JFrame類似,用于設(shè)計(jì)對(duì)話框;
  • JApplet:用于設(shè)計(jì)可以嵌入在網(wǎng)頁中的小程序。

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

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

Java Swing基礎(chǔ)(層次結(jié)構(gòu),組件,布局管理)

Swing基礎(chǔ)層次結(jié)構(gòu)

圖形環(huán)境和圖形對(duì)象

  • 坐標(biāo)

GUI組件的左上角坐標(biāo)默認(rèn)為(0,0)

從左上角到右下角,水平坐標(biāo)x和垂直坐標(biāo)y增加

坐標(biāo)的單位是像素

  • Graphics對(duì)象

專門管理圖形環(huán)境,Graphics類是一個(gè)抽象類

抽象類Graphics提供了一個(gè)于平臺(tái)無關(guān)的繪圖接口

各平臺(tái)上實(shí)現(xiàn)的Java系統(tǒng)將創(chuàng)建Graphics類的一個(gè)子類來實(shí)現(xiàn)繪圖功能,這個(gè)子類對(duì)程序員是透明的。

在執(zhí)行paint方法時(shí),系統(tǒng)會(huì)傳遞一個(gè)指向特定平臺(tái)的Graphics子類的圖形對(duì)象g

一個(gè)簡(jiǎn)單的例子

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號(hào),紅色",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

我們需要繼承一個(gè)主窗口,才能實(shí)現(xiàn)swing編程

public void paint(Graphics g) 

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

g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 

設(shè)置關(guān)閉窗口的默認(rèn)操作

注意: paint方法會(huì)被自動(dòng)調(diào)用

其他的畫圖函數(shù)看API文檔就可以了

前面我們使用的是Graphics來繪圖,其實(shí)我們可以用更強(qiáng)大的Graphics2D來繪圖,當(dāng)然,我們需要將傳遞進(jìn)來的g向上轉(zhuǎn)型為Graphics2D,因?yàn)閭鬟f過來的g就是Graphics2D的一個(gè)子類

Graphics2D g2d = (Graphics2D)g;

Swing 基礎(chǔ)

swing:一個(gè)預(yù)定好各種組件的包,JFrame就是swing里面的一個(gè)組件

JFC與Swing

JFC(Java Foundation Classes)

  • 是關(guān)于GUI組件和服務(wù)的完整集合
  • 作為JAVA SE的一個(gè)有機(jī)部分,主要包含5個(gè)部分

AWT

Java2D

Accessibility

Drag & Drop

Swing

  • Swing
  • JFC的一部分
  • 提供按鈕、窗口、表格等所有的組件
  • 純Java組件(完全用Java寫的組件)

AWT組件

  • 在Java.awt包里,包括Button、Checkbox、Scrollbar等,都是Component類的子類
  • 大部分含有native code,所以隨操作系統(tǒng)平臺(tái)的不同會(huì)顯示出不同的樣子,而不能進(jìn)行更改,是重量級(jí)的組件

Swing組件

  • 其名稱都是在原來的AWT組件名稱前加上J,例如JButton、JCheckBox、JScrollbar等,都是JComponent類的子類
  • 架構(gòu)在AWT上,是AWT的擴(kuò)展而不是取代
  • 完全由Java語言編寫,其外觀和功能不依賴于任何由宿主平臺(tái)的窗口系統(tǒng)所提供的代碼,是輕量級(jí)組件
  • 可提供更豐富的視覺感受

在Applet和Application中應(yīng)用Swing

  • 在Applet中應(yīng)用Swing,就要將Swing組件加載到Applet容器上(通常是JApplet),這通常在init方法中完成
  • 在Application(本地應(yīng)用程序,也就是主函數(shù)中)中應(yīng)用Swing,也是要將Swing組件加載到這個(gè)Application的頂層容器(通常是JFrame)中。

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

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

Swing層次

在這里插入圖片描述

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

  • Component類

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

大多數(shù)GUI組件直接或間接的擴(kuò)展Component

  • Container類

容納相關(guān)組件

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

包括setLayout方法,用來設(shè)置布局,幫助Container對(duì)象對(duì)其中的組件進(jìn)行定位和設(shè)置組件大小

  • JComponent類–多數(shù)Swing組件的超類

可定制的觀感、即可根據(jù)需求定制組件

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

一般的事件處理功能

Swing的組件和容器層次

  • 頂層容器

必須跟操作系統(tǒng)打交道,所以都是重量級(jí)組件、

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

JFrame實(shí)現(xiàn)單個(gè)主窗口

JDialog 實(shí)現(xiàn)一個(gè)二級(jí)窗口

JApplet在瀏覽器窗口實(shí)現(xiàn)一個(gè)applet顯示區(qū)域

  • 中間層容器

容納其他組件的

  • 原子組件

直接與用戶交互的組件

例:三層容器結(jié)構(gòu)

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);    
    }
}

分析一下關(guān)鍵部分的代碼

首先,需要一個(gè)頂層容器,然后從容器得到一個(gè)內(nèi)容面板Container

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

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

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組件的基本層次結(jié)構(gòu)了

布局管理

使用方法: 調(diào)用容器的setLayout方法就可以了

例如:

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

其中的FlowLayout是布局管理器對(duì)象

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 搭建公司私有MAVEN倉(cāng)庫(kù)的方法

    搭建公司私有MAVEN倉(cāng)庫(kù)的方法

    這篇文章主要介紹了搭建公司私有MAVEN倉(cāng)庫(kù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn)

    Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn)

    本文主要介紹了Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定

    解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定

    這篇文章主要介紹了解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定,Jackson通常被用來實(shí)現(xiàn)Java對(duì)象和JSON數(shù)據(jù)的相互轉(zhuǎn)換功能,需要的朋友可以參考下
    2016-01-01
  • JavaEE線程安全定時(shí)器模式任務(wù)

    JavaEE線程安全定時(shí)器模式任務(wù)

    這篇文章主要介紹了JavaEE線程安全定時(shí)器模式任務(wù),定時(shí)器模式像是一個(gè)鬧鐘定時(shí),在一定時(shí)間之后被喚醒并執(zhí)行某個(gè)之前設(shè)定好的任務(wù),感興趣的小伙伴可以參考一下
    2022-06-06
  • MyBatis逆向工程基本操作及代碼實(shí)例

    MyBatis逆向工程基本操作及代碼實(shí)例

    這篇文章主要介紹了MyBatis逆向工程基本操作及代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 解決Java字符串JSON轉(zhuǎn)換異常:cn.hutool.json.JSONException:?Mismatched?hr?and?body

    解決Java字符串JSON轉(zhuǎn)換異常:cn.hutool.json.JSONException:?Mismatched?

    這篇文章主要給大家介紹了關(guān)于如何解決Java字符串JSON轉(zhuǎn)換異常:cn.hutool.json.JSONException:?Mismatched?hr?and?body的相關(guān)資料,文中將解決的辦法通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • java實(shí)現(xiàn)單機(jī)版五子棋小游戲

    java實(shí)現(xiàn)單機(jī)版五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單機(jī)版五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化

    詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化

    本篇文章主要介紹了詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09
  • Spring依賴注入的三種方式詳解

    Spring依賴注入的三種方式詳解

    這篇文章主要給大家介紹了三種Spring依賴注入的方式,?settter方法注入,構(gòu)造器注入以及變量(filed)?注入這三種方式,文章通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)簡(jiǎn)易Web服務(wù)器

    Java實(shí)現(xiàn)簡(jiǎn)易Web服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易Web服務(wù)器的相關(guān)方法,想要制作Web服務(wù)器的朋友可以參考本文
    2016-02-02

最新評(píng)論

修文县| 科尔| 怀远县| 卫辉市| 青龙| 双牌县| 临沭县| 南郑县| 德兴市| 景泰县| 商丘市| 育儿| 菏泽市| 健康| 台东县| 旬阳县| 琼结县| 湄潭县| 连平县| 巴青县| 株洲县| 镇康县| 论坛| 康乐县| 秦皇岛市| 龙岩市| 六安市| 榕江县| 天柱县| 辉县市| 巴彦县| 鲜城| 莱州市| 安西县| 沙坪坝区| 枝江市| 鄂托克前旗| 富裕县| 剑川县| 成都市| 莱芜市|