Java GUI圖形界面

GUI(圖形用戶界面)

  • GUI
    • Graphical User Interface(圖形用戶接口)
    • 用圖形的方式,來顯示計算機操作的界面,這樣更方便更直觀
  • CLI
    • Command Line User Interface(命令行用戶接口)
    • 就是常見的Dos命令行操作
    • 需要記憶一些常用的命令,操作不直觀
  • 舉例:
    • 例如:創(chuàng)建文件夾,或者刪除文件夾等
  • Java為GUI提供的對象都存在java.awt和javax.swing兩個包中

Awt和Swing

  • java.awt:Abstract Window ToolKit(抽象窗口工具包),需要調用本地系統(tǒng)方法實現(xiàn)功能。屬重量級控件
  • java.swing:在AWT的基礎上,建立的一套圖形界面系統(tǒng),其中提供了更多的組件,而且完全由Java實現(xiàn)。增強了移植性,屬輕量級控件
GUI繼承關系圖.png

布局管理器

  • 容器中組件的排放方式,就是布局
  • 常見的布局管理器:
    • FlowLayout(流式布局管理器)
      • 從左到右的順序排列
      • Panel默認的布局管理器
    • BorderLayout(邊界布局管理)
      • 東,南,西,北,中
      • \color{red}{Frame默認的布局管理器}
    • GridLayout(網(wǎng)格布局管理器)
      • 規(guī)則的矩陣
    • CardLayout(卡片布局管理器)
      • 選項卡
    • GridBagLayout(網(wǎng)格包布局管理器)
      • 非規(guī)則矩陣
布局樣式.png

建立一個簡單的窗體

  • Container常用子類:Window Panel(面板,不能單獨存在)
  • Window常用子類:Frame Dialog
  • 簡單的窗體創(chuàng)建過程:
package GUITest;
import java.awt.*;

public class FreamDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("MyQQ");
        // 設置窗體大小
//        frame.setSize(500, 400);
        // 設置初始位置
//        frame.setLocation(550, 200);
        // 設置初始位置和窗體大小
        frame.setBounds(550, 200, 500, 400);
        // 設置流式布局
        frame.setLayout(new FlowLayout());
        // 創(chuàng)建按鈕
        Button button = new Button("click");
        // 添加到窗體
        frame.add(button);
        // 顯示窗體
        frame.setVisible(true);
        System.out.println("over");
    }
}

事件監(jiān)聽機制組成

  • 事件源(組件)
  • 事件(Event)
  • 監(jiān)聽器(Listener)
  • 事件處理(引發(fā)事件后處理方式)
事件監(jiān)聽機制流程圖.png
// 事件監(jiān)聽
public static void main(String[] args){
    frame.setBounds(550, 200, 500, 400);
    frame.setLayout(new FlowLayout());
    Button button = new Button("click");
    frame.add(button);
    rame.setVisible(true);
    
    // 按鈕監(jiān)聽器
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            System.exit(0);
        }
    });

    // 設置監(jiān)聽器
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            super.windowClosing(e);
            System.exit(0);
        }
    });
}

鼠標鍵盤監(jiān)聽

package GUITest;

import java.awt.*;
import java.awt.event.*;

public class MouseAndKeyDemo {
    private Frame frame;
    private TextField textField;
    private Button button;

    public MouseAndKeyDemo() {
        init();
    }
    private void init(){
        frame = new Frame("鼠標鍵盤監(jiān)聽");
        frame.setBounds(400, 200, 500, 400);
        frame.setLayout(new FlowLayout());
        textField = new TextField(15);
        button = new Button("click");
        frame.add(textField);
        frame.add(button);
        myEvent();
        frame.setVisible(true);
    }

    private void myEvent() {
        // 窗體監(jiān)聽
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        // 給按鈕添加一個事件 鼠標事件先執(zhí)行后執(zhí)行按鈕事件
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                System.out.println("btn run..");
            }
        });

        // 在按鈕上添加一個鼠標監(jiān)聽
        button.addMouseListener(new MouseAdapter() {
            private int count = 1;

            // 進入事件
            @Override
            public void mouseEntered(MouseEvent e) {
                textField.setText("觸發(fā):" + count++);
            }
            // 點擊事件
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("mouse run...");
                if (e.getClickCount() == MouseEvent.BUTTON2){
                    textField.setText("double click");
                }
            }
        });
        // 鍵盤監(jiān)聽
        textField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int code = e.getKeyCode();
                if (!(code>=KeyEvent.VK_0 && code <= KeyEvent.VK_9)){
                    System.out.println("必須是數(shù)字");
                    e.consume();
                }
                if (e.isControlDown() && code == KeyEvent.VK_ENTER){
                    // Ctrl + Enter
                    System.out.println("c + en");
                }
            }
        });
    }
    public static void main(String[] args) {
        MouseAndKeyDemo mouseAndKeyDemo = new MouseAndKeyDemo();
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容