1. 程式人生 > >第58節:Java中的圖形介面程式設計-GUI

第58節:Java中的圖形介面程式設計-GUI

標題圖

歡迎到我的簡書檢視我的文集

前言:

GUI是圖形使用者介面,在Java中,圖形使用者介面我們用GUI表示,而GUI的完整英文為: Graphical User Interface(圖形使用者介面), 所謂圖形使用者介面就是以圖形的方式來顯示你計算機的操作介面, 我們計算機中操作的介面就是 我們Java中常說的圖形使用者介面, 這樣的操作簡單明瞭.

CLI的英文為Command Line User Interface, 是命令列使用者介面, 命令列, 這就是我們程式設計師常常熟悉的, 常見的Dos命令列操作, 這些常用命令式需要記住的, CLI的操作就不那麼直觀了.

Java

GUI提供了物件在 java.awtjavax.swing 兩個包中

在早年中, Java.awt為抽象視窗工具包, 英文為 Abstract Window ToolKit, 需要呼叫本地的系統方法來實現功能需求,屬於重量級的控制元件.

而在awt的基礎上,建立了一套圖形介面系統, 從而提供了更多的元件, 而且完全是由Java實現的, 增強了移植性, 屬於輕量級的控制元件. 有自己的顯示效果, 顯示自己的形狀, 平臺要求低了, 輕量級和體統嵌入的比較淺.

繼承關係

Component .png

Button按鈕,Label標籤,Checkbox複選框,TextComponent文字元件,TextArea

文字區域,TextField文字框.

元件裡面還能放入元件,在Java中我們叫容器.
window 窗體, Panel 面板
Frame小視窗,Dialog對話方塊,FileDialog檔案對話方塊

GUI 佈局

Flow 流式佈局

上左下右

掃雷的格式佈局

佈局管理

常見的佈局管理器:

流式佈局管理: FlowLayout, 是從左到右的排列, 是Panel預設的佈局管理.

邊界佈局: 東南西北,中, 是Frame預設的佈局管理

網格佈局管理: GridLayout

卡片佈局管理: CardLayout

網格包佈局管理: GridBagLayout

GUI

簡單的小窗體

java.awt 包含用於建立使用者介面和繪製圖形影象的所有類.

java.awtComponent

java.lang.Object
-> java.awt.Component

所有已實現的介面:

ImageObserver, MenuContainer, Serializable

component 是一個具有圖形表示能力的物件.

component

子類

window

java.awtFrame

java.lang.Object
-> java.awt.Component
-> java.awt Container
-> java.awt.Window
-> java.awt.Frame

實現的介面:

ImageObserver, MenuContainer, Serializable, Accessible

直接已知的子類:

JFrame

Frame是帶有標題和邊框的頂層視窗.

frame

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class FrameDemo {

    public static void main(String[] args) {

        //1,建立一個窗體。Frame
        Frame f = new Frame("my frame");
        //2, 對窗體進行基本設定。
        f.setSize(500, 400);
        f.setLocation(400, 200);
        //設定佈局。
        f.setLayout(new FlowLayout());
        
        //給窗體新增元件。
         Button but = new Button("my button");
         
         //加入一個文字框元件。
         TextField tf = new TextField(40);
        
         //將元件新增到窗體中。
         f.add(tf);
         f.add(but);
         
         //1,在按鈕上新增所需的監聽器。
         but.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("按鈕被觸發了....."+e);
                System.exit(0);

            }
        });
         
         f.addWindowListener(new WindowAdapter() {
    
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("window closing");
                System.exit(0);
            }

            @Override
            public void windowOpened(WindowEvent e) {
                
                System.out.println("孔雀開屏!window open");
            }
        
        });
         
        but.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if(e.getClickCount() == 2){
                    
                    System.out.println("mouse double click");
                }
            }
            
        });
         
         
        tf.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                
                //1,如何獲取錄入的內容。通過鍵盤事件物件獲取。
//              char key = e.getKeyChar();
//              int code = e.getKeyCode();
//              System.out.println(code+"...."+KeyEvent.getKeyText(code));
                
//              int code = e.getKeyCode();
//              if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
//                  System.out.println("必須是0-9數字");
//                  e.consume();//直接取消預設處理方式。
//              }
                
                
                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("ctrl+enter run");
                    
                }
                
            }
            
        });
         
        
        //3,讓窗體顯示。
        f.setVisible(true);
        
        System.out.println("over");
    }

}

事件監聽機制

  1. 事件源-元件
  2. 事件 - Event
  3. 監聽器 - Listener
  4. 事件處理

Button

java.awt
classButton

java.lang.Object
-> java.awt.Component
-> java.awt.Button

button

監聽事件:

addActionListener(ActionListener l)
新增指定的動作偵聽器以從此按鈕接收動作事件。

視窗介面卡

MouseListener

mouseListener

public interface MouseListener extends EventListener

用於在元件上接收“有趣”滑鼠事件(按,釋放,單擊,輸入和退出)的偵聽器介面。

方法

方法的詳細資訊:

mouseClicked
void mouseClicked(MouseEvent e)
在元件上單擊滑鼠按鈕時呼叫

mousePressed
void mousePressed(MouseEvent e)
在元件上按下滑鼠時呼叫

mouseReleased
void mouseReleased(MouseEvent e)
在元件上釋放滑鼠時呼叫

mouseEntered
void mouseEntered(MouseEvent e)
當滑鼠進入元件時呼叫

mouseExited
void mouseExited(MouseEvent e)
當滑鼠退出元件時呼叫

方法摘要

文字名稱

圖形化介面的工具

選擇

選擇2

選擇3

選擇4

選擇5

        //1,獲取路徑。通過文字框物件完成。
        String str_dir = jTextField1.getText();
        
        //2,將字串路徑封裝成File物件。
        File dir = new File(str_dir);
        //判斷。
        if(dir.exists()&&dir.isDirectory()){
            
            
            //清空文字區域。
            jTextArea1.setText("");
            //3,獲取檔名稱列表。
            String[] names = dir.list();
            for(String name :names){
            //4,將名字顯示到文字區域。
            jTextArea1.append(name+LINE_SEPARATOR);
            }
            
        }

JFileChooser

public class JFileChooser extends JComponent implements Accessible

注意

事件監聽機制流程:

  1. 監聽器 - 將監聽器註冊到事件源
  2. 事件源 - 元件 (外部動作)
  3. 產生事件物件 - 將事件物件傳給事件處理方式

選單繼承

繼承

MenuComponent
MenuBar,MenuItem,Menu

達叔小生:往後餘生,唯獨有你
You and me, we are family !
90後帥氣小夥,良好的開發習慣;獨立思考的能力;主動並且善於溝通
簡書部落格: 達叔小生
https://www.jianshu.com/u/c785ece603d1

結語

  • 下面我將繼續對 其他知識 深入講解 ,有興趣可以繼續關注
  • 小禮物走一走 or 點贊