日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Java-GUI编程实战之管理系统 Day2【Swing(组件介绍、布局管理器、事件类及监听器类)、基础组件按钮和输入框的用法】

發布時間:2024/9/30 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-GUI编程实战之管理系统 Day2【Swing(组件介绍、布局管理器、事件类及监听器类)、基础组件按钮和输入框的用法】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 視頻、課件、源碼【鏈接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q?提取碼:zjxs】
  • Java-GUI編程實戰之管理系統 Day1【項目開發流程、軟件三層架構、項目需求、項目結構分析】
  • Java-GUI編程實戰之管理系統 Day2【Swing(組件介紹、布局管理器、事件類及監聽器類)、基礎組件按鈕和輸入框的用法】

  • Java-GUI編程實戰之管理系統 Day3【學生管理系統GUI設計、學生管理系統增刪改查、項目MVC結構介紹、Java技能圖譜】

  • 目? ?錄

    Day02 目錄

    Swing 介紹

    Swing開發環境準備

    idea 使用配置

    idea 項目配置

    idea 全局配置

    Swing組件介紹

    Swing布局管理器

    Swing事件

    Swing事件類及監聽器類

    Swing 示例演示

    idea 新建項目

    JFrame 使用

    Dialog 使用

    基礎組件按鈕和輸入框的用法

    事件 示例

    表格 示例

    集合數據 轉 二維數組

    學生管理系統界面設計示例


    Day02 目錄

    Swing 介紹

    定義

    Swing:Java 為GUI應用開發提供的一組工具包,是 Java 基礎類的一部分。

    GUI:Graphical User Interface,圖形用戶界面。

    AWT:AWT 是抽象窗口組件工具包,是 java 最早的用于編寫圖形節目應用程序的開發包。Swing 是為了解決 AWT 存在的問題而新開發的包,它以 AWT 為基礎的。

    MVC架構

    Swing 組件遵循模型 - 視圖 - 控制器架構,即MVC架構。

    • 模型表示組件的數據
    • 視圖表示組件數據的可視化表示形式
    • 控制器接受用戶在視圖上的輸入,并且在組件的數據上反映變化

    特點

    • 豐富的組件, Swing 提供了一組豐富的先進的組件,如樹,頁簽窗體,滑動條,顏色選擇器,表格控件
    • 高級自定義,Swing 組件可以用非常簡單的方法來自定義,因為可視化外觀是獨立于內部表示的
    • 提供了許多比 AWT 更好的屏幕顯示元素,使用純 Java 實現,能夠更好的兼容跨平臺運行。Swing 組件在javax.swing.*包下,類名均以 J 開頭,如: JFrame、JLabel、JButtonn。

    Swing開發環境準備

    JDK

    • 安裝JDK1.8版本
    • 設置JAVA_HOME環境變量
    • 驗證JDK安裝是否正確

    IDE

    • IDEA的安裝及配置

    idea 使用配置

    idea 項目配置

    ??

    idea 全局配置

    ??

    Swing組件介紹

    組件:圖形化界面中的窗口、菜單欄、對話框、標簽、按鈕、文本框等等,這些“元素”統一被稱為 組件(Component)。

    • 組件種類:頂層容器、中間容器、基本組件。頂層容器->中間容器->基本組件?;窘M件 放在 中間容器 內,中間容器 放在 頂層容器 內?!厩短钻P系】
    • 組件的繼承關系:頂層容器 屬于窗口類組件,繼承自java.awt.Window;中間容器和基本組件繼承自javax.swing.JComponent。

    分類

    組件類

    說明

    頂層容器(窗口組件,圖形界面至少需要一個窗口,可獨立顯示)

    JFrame

    窗口(swing開發主要使用 JFrame 作為頂層容器)

    JDialog

    對話框

    中間容器(基本組件的載體,必須在頂層容器內,不可獨立顯示)

    JPanel

    面板,還有JSplitPane分割面板,JTabbedPane選項卡面板、JScrollPane面板等

    JMenuBar

    菜單欄,還有彈出菜單JPopupMenu

    JToolBar

    工具欄

    基本組件

    JLabel標簽

    JButton按鈕

    JTextField文本框

    JFileChooser文本選取器

    JList列表

    JRadioButton單選按鈕

    ?

    JPasswordField

    密碼框

    JColorChooser顏色選取器

    JSlider滑塊

    JToggleButton開關按鈕

    ?

    JTextArea大文本框

    JCheckBox復選框

    JTable表格

    ?

    JProgressBar進度條

    JComboBox下拉列表框

    JTree樹

    Swing布局管理器

    ?Swing 中各種組件(JComponent)需要添加到面板容器中(JPanel),面板容器需要指定布局管理器(LayoutManager),明確容器(Container)內的各組件間的排列布局方式。

    布局管理器類

    說明

    FlowLayout

    流式布局,JPanel的默認布局。根據組件加入順序水平方向排列,排滿一行換下一行繼續排列

    GridLayout

    網格布局,用一個矩形網格形式來管理組件,每一個網格按順序放置一個控件

    GridBagLayout

    網格袋布局,最靈活的布局管理器類。在不需要相同大小的組件的情況下,GridBagLayout 對象垂直、水平或沿著它們的基線來排列組件

    BoxLayout

    箱式布局,將Container中的多個組件按 水平 或 垂直 的方式排列

    GroupLayout

    分組布局,組件按層次分組(串行 或 并行),分別確定 組件組 在 水平 和 垂直 方向上的位置

    CardLayout

    卡片布局,將容器中的每個組件看作一張卡片,一次只能顯示一張卡片,默認顯示第一張卡片

    BorderLayout

    邊界布局,把容器按方位分為 5 個區域(東、西、南、北、中),每個區域放置一個組件,JFrame和JDialog默認布局為BorderLayout。

    SpringLayout

    彈性布局,通過定義組件四條邊的坐標位置來實現布局

    null

    空布局或絕對布局,通過設置組件在Container中的坐標位置來放置組件

    默認管理器 有 兩類:
    • 面板管理器:流式布局?FlowLayout(最常用 對應 面板)...?
    • 邊界管理器:邊界布局 BorderLayout(不常用 對應 頂級容器)...

    Swing事件

    事件:改變對象的狀態被稱為事件,即事件描述源的狀態變化。例如,點擊一個按鈕,移動鼠標,通過鍵盤輸入一個字符,從列表中選擇一個項目、關閉窗口、滾動頁面都是導致一個事件發生的活動。

    事件處理:當某個事件發生時(某個Component的某種狀態發生改變時),我們希望在這個時候代碼中能做一些事情,這個就是事件處理。比如在某編輯界面點擊窗口關閉時,彈窗問詢用戶是否確認保存修改。

    事件源:引發狀態改變的某個對象,一般是Component。

    事件監聽器:監聽器被安裝在某個Component上,負責監聽這個Component具體狀態被改變了。


    事件處理流程:

  • 首先將事件監聽器注冊到事件源上面
  • 觸發事件源上的事件(改變狀態)
  • 生成事件對象
  • 事件監聽器監聽到該事件的發生,生成的事件對象當做參數傳入事件處理器(監聽器類中的方法)
  • 調用事件處理器做出響應
  • Swing事件類及監聽器類

    事件類

    監聽器類

    描述

    ActionEvent

    ActionListener

    當單擊按鈕或雙點擊列表的項時,生成 ActionEvent,監聽器接收動作事件

    InputEvent

    ?

    InputEvent 類是所有組件層輸入事件的根事件類

    KeyEvent

    KeyListener

    在按下一個字符時,按鍵事件生成,監聽器接收按鍵事件

    MouseEvent

    MouseListener

    監聽器接收鼠標事件

    WindowEvent

    WindowListener

    這個類的對象代表一個窗口狀態的變化,監聽器接收窗口事件

    FocusListener

    FocusListener

    ?

    Swing 示例演示

    • JFrame的用法
    • JDiaglog的用法
    • JTable的用法
    • 基礎組件按鈕和輸入框的用法
    • 事件的用法

    idea 新建項目

    ??

    ??

    JFrame 使用

    頂層容器-窗口示例,Frame屬于組件類型中的頂層容器。

    jFrame.setLocationRelativeTo(null); // 設置窗口在屏幕正中央

    jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // 設置關閉窗口時進程退出

    Dialog 使用

    基礎組件按鈕和輸入框的用法

    頂層容器,可以放置面板(中級容器)。

    流式布局 FlowLayout

    ??

    事件 示例

    添加事件:點擊按鈕后,改變輸入框中的內容。注冊事件編輯器,事件源是JButton。

    ??

    表格 示例

    表格:表名、行、列。表格這種基礎組件放在JScrollPane中。

    JScrollPane scrollPane = new JScrollPane(); // 創建滾動面板(表格);表格內容太多,表格內容可能超出屏幕高度,所以叫做“滾動面板”,可以從上往下拉,操作頁面美觀。

    jTable.setModel(new DefaultTableModel(...)); // 指明表格列名以及每一列對應的數據;數據在前,列名靠后

    集合數據 轉 二維數組

    添加學生類,構建測試數據。

    package cn.itcast.swing;import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.util.ArrayList; import java.util.List;/*** 表格示例*/ public class TableDemo {public static void main(String[] args) {JFrame jFrame = new JFrame("窗口Frame");//創建窗口并指定窗口個名jFrame.setSize(400, 300);//設置窗口的寬和高jFrame.setLocationRelativeTo(null);//設置窗口在屏幕正中央jFrame.setResizable(false);//設置不可調整窗口大小jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//設置關閉窗口時進程退出JScrollPane scrollPane = new JScrollPane();//創建滾動面板(表格)內容太多,表格數據可能超出屏幕高度JTable jTable = new JTable(); // jTable.getTableHeader().setResizingAllowed(false);//設置表格寬度禁止調整/setResizingAllowed:能否拉伸 // jTable.getTableHeader().setReorderingAllowed(false);//設置表格進制拖拽String[] tHeader = {"學生編號", "學生姓名", "學生年齡", "學生地址"};//表的頭//循環構建學生數據List<Student> studentList = new ArrayList<>();for (int i = 1; i <= 100; i++) {Student student = new Student("no." + i, "張三" + i, 20 + i, "北京昌平校區" + i);//創建學生對象studentList.add(student);}String[][] tBody = list2Array(studentList);//表的內容jTable.setModel(new DefaultTableModel(tBody, tHeader)); // 兩個參數:二維數組tBody、表頭tHeaderscrollPane.setViewportView(jTable);//在面板上設置表格視圖jFrame.add(scrollPane);//將panel放入窗口jFrame.setVisible(true);//設置窗口顯示}//集合數據轉為二維數組方法public static String[][] list2Array(List<Student> list) {//根據Student的model與集合數據定義JTable的數據二維數組String[][] tbody = new String[list.size()][4];for (int i = 0; i < list.size(); i++) {Student student = list.get(i);tbody[i][0] = student.getId();tbody[i][1] = student.getName();tbody[i][2] = student.getAge() + "";tbody[i][3] = student.getAddress();}return tbody;} }

    學生管理系統界面設計示例

    絕對布局(絕對定位);? ?this:絕對布局的實例。

    ??

    package cn.itcast.swing;import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import java.util.ArrayList;/*** 學生管理系統布局示例*/ public class StudentManagerDemo extends JDialog {public static void main(String[] args) {StudentManagerDemo studentManagerDemo = new StudentManagerDemo();studentManagerDemo.setVisible(true);}public StudentManagerDemo() {this.setTitle("學生管理系統");this.setSize(600, 400);this.setLocationRelativeTo(null);//設置居中this.setResizable(false);this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);this.setLayout(null);//設置布局為絕對布局//表格標題JLabel tableLabel = new JLabel("學生列表");tableLabel.setBounds(265, 20, 70, 25);this.add(tableLabel);//表格JTable table = new JTable();table.getTableHeader().setReorderingAllowed(false); //列不能移動table.getTableHeader().setResizingAllowed(false); //不可拉動表格table.setEnabled(false); //不可更改數據JScrollPane tablePane = new JScrollPane();tablePane.setBounds(50, 50, 500, 200);tablePane.setViewportView(table); //視口裝入表格this.add(tablePane);//字段標題JLabel numberLabel = new JLabel("學生編號");numberLabel.setBounds(50, 250, 70, 25);JLabel nameLabel = new JLabel("學生姓名");nameLabel.setBounds(150, 250, 70, 25);JLabel ageLabel = new JLabel("學生年齡");ageLabel.setBounds(250, 250, 70, 25);JLabel addressLabel = new JLabel("學生地址");addressLabel.setBounds(350, 250, 70, 25);this.add(numberLabel);this.add(nameLabel);this.add(ageLabel);this.add(addressLabel);//增加組件JTextField addNumberText = new JTextField();addNumberText.setBounds(50, 280, 80, 25);JTextField addNameText = new JTextField();addNameText.setBounds(150, 280, 80, 25);JTextField addAgeText = new JTextField();addAgeText.setBounds(250, 280, 80, 25);JTextField addAddressText = new JTextField();addAddressText.setBounds(350, 280, 80, 25);this.add(addNumberText);this.add(addNameText);this.add(addAgeText);this.add(addAddressText);JButton addBtn = new JButton("新增");addBtn.setBounds(460, 280, 90, 25);this.add(addBtn);//修改組件JTextField updateNumberText = new JTextField();updateNumberText.setBounds(50, 310, 80, 25);JTextField updateNameText = new JTextField();updateNameText.setBounds(150, 310, 80, 25);JTextField updateAgeText = new JTextField();updateAgeText.setBounds(250, 310, 80, 25);JTextField updateAddressText = new JTextField();updateAddressText.setBounds(350, 310, 80, 25);this.add(updateNumberText);this.add(updateNameText);this.add(updateAgeText);this.add(updateAddressText);JButton updateBtn = new JButton("修改");updateBtn.setBounds(460, 310, 90, 25);this.add(updateBtn);//刪除組件JTextField delNumberText = new JTextField();delNumberText.setBounds(50, 340, 80, 25);this.add(delNumberText);JButton delBtn = new JButton("刪除");delBtn.setBounds(460, 340, 90, 25);this.add(delBtn);//定義表格頭String[] thead = {"學生編號", "學生姓名", "學生年齡", "學生住址"};//調用adminService的查詢服務ArrayList<Student> dataList = new ArrayList<>();for (int i = 1; i <= 20; i++) {Student student = new Student("no." + i, "student" + i, 20 + i, "北京" + i);dataList.add(student);}//調用list2Array方法,將查詢到的集合轉為數組,方便為JTable賦值String[][] tbody = list2Array(dataList);//將查詢到的結果為table賦值TableModel dataModel = new DefaultTableModel(tbody, thead);table.setModel(dataModel);}//集合數據轉為二維數組方法public static String[][] list2Array(ArrayList<Student> list) {//根據Student的model與集合數據定義JTable的數據二維數組String[][] tbody = new String[list.size()][4];for (int i = 0; i < list.size(); i++) {Student student = list.get(i);tbody[i][0] = student.getId();tbody[i][1] = student.getName();tbody[i][2] = student.getAge() + "";tbody[i][3] = student.getAddress();}return tbody;}}

    謝謝 黑馬程序員平臺 ~

    總結

    以上是生活随笔為你收集整理的Java-GUI编程实战之管理系统 Day2【Swing(组件介绍、布局管理器、事件类及监听器类)、基础组件按钮和输入框的用法】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。