java GUI 快速入門


java 中編寫 GUI 有兩中工具包,分別為 AWT、Swing。
Swing 是 AWT 的拓展,Swing 具有比 AWT 豐富的組件和方法。
AWT 和 Swing 都能跨平台使用;AWT 會隨着不同的系統平台,UI 樣式會有所變化,Swing 則不會,設計完畢后在所有平台下樣式一致。

import java.awt.*;
import javax.swing.*;

一個 awt 示例

下面是一個窗口示例

import java.awt.*;
public class MyFrame extends Frame {
    public  MyFrame(){
        super("測試");
        setSize(400,200);
        setVisible(true);
    }
    public  static  void Main(String args[]){
        new MyFrame();
    }
}

file
創建一個窗口,要繼承 Frame,同時會繼承 Frame 中的一些方法;
Frame 中:

  • super 方法可以設置窗口標題;
  • setSize 設置窗口大小,(width,hight)
  • setVisible 設置是否顯示窗口,true 顯示,false 隱藏

setLayout(new FlowLayout());用於設置窗口布局;
add(組件); 用於向窗口添加組件,例如按鈕等。

我們來向窗口添加組件

import java.awt.*;
public class MyFrame extends Frame {
    public  MyFrame(){
        super("測試");

        setLayout(new FlowLayout());

        Button btn=new Button("Button");
        Font f=new Font("宋體",Font.BOLD,28);
        btn.setFont(f);
        add(btn);

        setSize(400,200);
        setVisible(true);
    }

在 main 方法中啟動窗口

    public  static  void main(String args[]){
        new MyFrame();
    }

效果
file

事件

java 中,事件分為三個方面描述,
事件源:發生事件的對象
事件處理:委托事件處理模型
事件監聽者:負責處理事件

首先B監聽A,設置監聽的內容,並設置響應內容。
一旦A本身的狀態改變,就觸發C;
C執行D

媽媽跟兒子說,你作業做完了,媽媽就讓爸爸就給你削個蘋果吃。
媽媽:事件監控者
兒子:事件源
動作:做完作業
事件:爸爸削個蘋果給兒子

媽媽監控兒子,監控是否完成作業。設置作業完成后,觸發事件:削蘋果;
兒子做完作業,狀態變更,觸發事件;事件開始執行。

簡單來說 B 告訴 A ,如果 A 怎么樣了,就去做一件事情C。

實現事件流程

我們繼續利用上面的窗口,實現按鈕點擊時,改變窗口背景顏色。

實現一個事件

引入

import java.awt.event.ActionListener;

實現接口

class  Test implements  ActionListener{   
    public void actionPerformed(ActionEvent actionEvent) {
        System.out.println("執行工作");
    }

將事件注冊到控件上

package com.company;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyFrame extends Frame implements ActionListener {
    public  MyFrame(){
        super("測試");

        setLayout(new FlowLayout());

        Button btn=new Button("Button");
        Font f=new Font("宋體",Font.BOLD,28);
        btn.setFont(f);
        btn.addActionListener(this::actionPerformed);
        add(btn);
        setSize(400,200);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent actionEvent) {
        System.out.println("執行工作");
        setBackground(Color.BLUE);
    }
}

按鈕有個事件監聽器 addActionListener,我們將要執行的工作 actionPerformed 綁定進去。
當條件發生時,就會觸發此工作。

媽耶,我都不知道自己在說啥了。
C# 中,事件沒有那么麻煩,也不需要這么BB。。。

另外, actionEvent ,有兩個常用方法

        actionEvent.getActionCommand();		// 獲取對象名稱
        actionEvent.getSource()();			// 獲取源對象

布局

AWT 中,主要有 6 中布局方式。

  • FlowLayout 流式布局
    默認布局,控件從上到下,從左到右地排序。
  • BorderLayout 邊緣布局
    自動停靠窗體邊緣,並且長寬隨着窗體的變化。
    file
  • GridLayout 網格布局
    將容器分成若干行和若干列。
  • CradLayout 卡片布局
    像撲克牌一樣,每張牌是一個控件,多個控件疊加起來,每次只能查看一個。
  • GridBagLayout 網格塊布局
  • null 采用坐標定位布局

創建一個窗體,並設置流式布局

public class MyFrame extends Frame {
    public  MyFrame(){
        super("測試");
        setLayout(new FlowLayout());
		}
		}

繼承 Frame 的窗體中,使用 setLayout方法 可以設置布局。

組件方法

如圖是 GUI 控件中常用的控件關系繼承圖。
file

組件分為容器(Container)和控件。
容器又分為窗體(Window)和面板(Panel)。

Component 是所有組件的父類,Component 常用方法如下

Component類(抽象類)主要方法 
Color getBackground() : 獲取部件的背景色 
Font getFont() : 獲取部件的顯示字體 
Graphics getGraphics(): 獲取部件的Graphics屬性對象
void setBackground(Color c) : 設置部件的背景
void setEnabled(boolean b) : 是否讓部件功能有效 
void setFont(Font f) : 設置部件的顯示字體 
void setSize(int width,int height) : 設置部件大小 
void setVisible(boolean b) : 設置部件是否可見 
void setForeground(Color c) : 設置部件的前景色 
Tookit getToolkit() : 取得圖形部件的工具集(Toolkit) 
void requestFocus() : 讓部件得到焦點 
void add(PopupMenu popup) :給部件加入彈出菜單

常用控件

文本

文本框(TextField)只能顯示一行文本,文本域(TextArea)則可以顯示、編輯多行文字。

文本框的構造函數如下

TextField():構造一個單行文本輸入框。 
TextField(int):指定長度的單行文本輸入框。 
TextField(String):指定初始內容的單行文本輸入框。
TextField(String, int):指定長度、指定初始內容。

文本域的構造函數如下

TextArea( ):構造一個文本域。 
TextArea(int, int):構造一個指定長度和寬度的文本域。 TextArea(String):構造一個顯示指定文字的文本域。
TextArea(String, int, int):按指定長度、寬度和默認值構造文本域。

文本控件的常用方法有

void setEchoChar(‘*’) 設置回顯字符 
String getText( ) :獲取輸入框中的數據 
void setText(String s) :往輸入框寫入數據 
boolean isEditable( ):判斷輸入框是否可編輯。 
void select(int start,int end):選定由開始和結 束位置指定的文本。 void selectAll( ):選定所有文本。 

文本域(TextArea)中,還具有以下兩個常用方法

append(String s):將字符串添加到文本域的末尾 
insert(String s,int index):將字符串插入到文本域的指定位置

文本框有兩個常用事件
ActionEvent事件
在文本框按回車鍵時引發
注冊:addActionListener() 接口:ActionListener
方法:public void actionPerformed(ActionEvent e)

TextEvent事件
對文本輸入部件數據更改操作 (添加、修改、刪除)
注冊: addTextListener()
接口:TextListener
方法: public void textValueChanged(TextEvent e)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM