12.5Swing控件3Jpanel JOptionPane

JPanel

JPanel是一個輕量級容器組件,用于組織和管理其他 GUI 組件。它繼承自JComponent類,屬于javax.swing包,可以容納按鈕、文本框、標簽等控件??JPanel 默認使用的布局管理器是 FlowLayout,也可以嵌套其他面板,以便將它們組合在一起并作為一個整體來布局。幫助開發者創建復雜的界面布局。

1. JPanel 的基本特點

  • 輕量級容器:不自帶標題欄或邊框,需通過setBorder()方法添加。
  • 透明性:默認背景透明,但可通過setOpaque(true)設置為不透明。
  • 布局管理:需指定布局管理器(如FlowLayoutBorderLayoutGridLayout等)。

2. 常用構造方法

  • JPanel():創建默認使用FlowLayout的面板。
  • JPanel(LayoutManager layout):創建指定布局管理器的面板。

3. 核心方法

方法描述
add(Component comp)添加組件到面板。
setLayout(LayoutManager)設置面板的布局管理器。
setBackground(Color)設置面板背景色。
setBorder(Border)設置面板邊框(如LineBorder)。
setOpaque(boolean)設置面板是否透明。

4. 布局管理器示例

以下代碼展示了JPanel結合不同布局管理器的用法:


import javax.swing.*;
import java.awt.*;public class JPanelExample {public static void main(String[] args) {// 創建JFrame窗口JFrame frame = new JFrame("JPanel示例");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(600, 400);// 1. FlowLayout面板(默認布局)JPanel flowPanel = new JPanel();flowPanel.setBorder(BorderFactory.createTitledBorder("FlowLayout"));for (int i = 1; i <= 5; i++) {flowPanel.add(new JButton("按鈕" + i));}// 2. BorderLayout面板JPanel borderPanel = new JPanel(new BorderLayout());borderPanel.setBorder(BorderFactory.createTitledBorder("BorderLayout"));borderPanel.add(new JButton("北"), BorderLayout.NORTH);borderPanel.add(new JButton("南"), BorderLayout.SOUTH);borderPanel.add(new JButton("西"), BorderLayout.WEST);borderPanel.add(new JButton("東"), BorderLayout.EAST);borderPanel.add(new JButton("中"), BorderLayout.CENTER);// 3. GridLayout面板JPanel gridPanel = new JPanel(new GridLayout(2, 3));gridPanel.setBorder(BorderFactory.createTitledBorder("GridLayout (2x3)"));for (int i = 1; i <= 6; i++) {gridPanel.add(new JButton("網格" + i));}// 主面板:使用BoxLayout垂直排列三個子面板JPanel mainPanel = new JPanel();mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));mainPanel.add(flowPanel);mainPanel.add(Box.createVerticalStrut(10)); // 添加間距mainPanel.add(borderPanel);mainPanel.add(Box.createVerticalStrut(10));mainPanel.add(gridPanel);// 將主面板添加到窗口frame.add(mainPanel);frame.setVisible(true);}
}

5. 嵌套面板示例

通過嵌套面板,可以創建復雜的界面結構。以下是一個計算器布局示例:

import javax.swing.*;
import java.awt.*;public class CalculatorExample {public static void main(String[] args) {JFrame frame = new JFrame("計算器");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 400);// 主面板:BorderLayoutJPanel mainPanel = new JPanel(new BorderLayout());// 頂部面板:顯示框JTextField display = new JTextField();display.setEditable(false);display.setFont(new Font("Arial", Font.PLAIN, 24));mainPanel.add(display, BorderLayout.NORTH);// 中間面板:數字按鈕(使用GridLayout)JPanel buttonPanel = new JPanel(new GridLayout(4, 4, 5, 5));String[] buttons = {"7", "8", "9", "/","4", "5", "6", "*","1", "2", "3", "-","0", ".", "=", "+"};for (String text : buttons) {buttonPanel.add(new JButton(text));}mainPanel.add(buttonPanel, BorderLayout.CENTER);frame.add(mainPanel);frame.setVisible(true);}
}

6. 自定義繪制

通過繼承JPanel并重寫paintComponent(Graphics)方法,可以實現自定義繪圖:

import javax.swing.*;
import java.awt.*;public class CustomPanelExample {public static void main(String[] args) {JFrame frame = new JFrame("自定義面板");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);// 創建自定義面板JPanel customPanel = new JPanel() {@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 繪制矩形g.setColor(Color.RED);g.fillRect(50, 50, 100, 100);// 繪制橢圓g.setColor(Color.BLUE);g.fillOval(200, 50, 100, 100);// 繪制文本g.setColor(Color.BLACK);g.setFont(new Font("Arial", Font.BOLD, 20));g.drawString("自定義繪圖", 150, 200);}};customPanel.setOpaque(true);customPanel.setBackground(Color.WHITE);frame.add(customPanel);frame.setVisible(true);}
}

7. 注意事項

  • 線程安全:Swing 不是線程安全的,所有 GUI 操作應在事件調度線程(EDT)中執行。可使用SwingUtilities.invokeLater()確保線程安全。
  • 布局管理:合理選擇布局管理器,避免手動設置組件大小和位置。
  • 重繪機制:調用repaint()方法觸發paintComponent()重繪面板。

JPanel是 Swing 中組織界面的核心組件,通過靈活搭配布局管理器和嵌套結構,可以構建出各種復雜的 GUI 界面。掌握JPanel的使用是 Java GUI 開發的基礎。

JOptionPane

1. JOptionPane 提供了一種簡單的方式來彈出標準對話框,如消息框、確認對話框、輸入對話框等。它是實現與用戶進行簡單交互的一種便捷方式。

JOptionPane?提供了五種預定義的對話框類型:

  • 消息對話框:顯示信息,如操作成功提示。
  • 確認對話框:詢問用戶確認操作,如 “是否保存?”。
  • 輸入對話框:獲取用戶輸入的文本。
  • 選項對話框:提供多個選項供用戶選擇。
  • 文件選擇對話框:雖然屬于?JFileChooser,但常與?JOptionPane?配合使用。

2. 常用靜態方法

方法描述
showMessageDialog(Component parent, Object message)顯示消息對話框
showConfirmDialog(Component parent, Object message)顯示確認對話框(返回用戶選擇的按鈕值)
showInputDialog(Component parent, Object message)顯示輸入對話框(返回用戶輸入的文本)
showOptionDialog(Component parent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue)自定義選項對話框

3. 參數說明

  • parentComponent:對話框的父組件,用于定位。若為?null,對話框居中顯示。
  • message:對話框中顯示的內容(可以是字符串、組件或圖標)。
  • title:對話框標題。
  • optionType:確認對話框的按鈕類型(如?YES_NO_OPTIONYES_NO_CANCEL_OPTION)。
  • messageType:消息類型(如?ERROR_MESSAGEINFORMATION_MESSAGE),影響圖標顯示。
  • icon:自定義圖標。
  • options:自定義選項數組。

4. 消息對話框示例

import javax.swing.JOptionPane;public class MessageDialogExample {public static void main(String[] args) {// 基本消息對話框JOptionPane.showMessageDialog(null, "操作成功!", "提示", JOptionPane.INFORMATION_MESSAGE);// 錯誤消息對話框JOptionPane.showMessageDialog(null, "文件不存在!", "錯誤", JOptionPane.ERROR_MESSAGE);// 警告消息對話框JOptionPane.showMessageDialog(null, "磁盤空間不足!", "警告", JOptionPane.WARNING_MESSAGE);}
}

5. 確認對話框示例

import javax.swing.JOptionPane;public class ConfirmDialogExample {public static void main(String[] args) {// 標準確認對話框(Yes/No/Cancel)int choice = JOptionPane.showConfirmDialog(null, "是否保存更改?", "確認", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);// 處理用戶選擇switch (choice) {case JOptionPane.YES_OPTION:System.out.println("用戶選擇了Yes");break;case JOptionPane.NO_OPTION:System.out.println("用戶選擇了No");break;case JOptionPane.CANCEL_OPTION:case JOptionPane.CLOSED_OPTION:System.out.println("操作取消");break;}}
}

6. 輸入對話框示例

import javax.swing.JOptionPane;public class InputDialogExample {public static void main(String[] args) {// 基本文本輸入String name = JOptionPane.showInputDialog(null, "請輸入您的姓名:", "用戶信息", JOptionPane.PLAIN_MESSAGE);if (name != null && !name.isEmpty()) {JOptionPane.showMessageDialog(null, "歡迎," + name + "!", "問候", JOptionPane.INFORMATION_MESSAGE);} else {JOptionPane.showMessageDialog(null, "輸入為空或已取消", "提示", JOptionPane.WARNING_MESSAGE);}// 自定義選項輸入Object[] options = {"紅色", "綠色", "藍色"};Object color = JOptionPane.showInputDialog(null, "選擇喜歡的顏色:", "顏色選擇", JOptionPane.QUESTION_MESSAGE, null, options, options[0]);if (color != null) {JOptionPane.showMessageDialog(null, "您選擇了:" + color, "結果", JOptionPane.INFORMATION_MESSAGE);}}
}

7. 自定義選項對話框示例

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;public class OptionDialogExample {public static void main(String[] args) {// 自定義圖標Icon icon = new ImageIcon("path/to/icon.png"); // 替換為實際圖標路徑// 自定義選項Object[] options = {"確定", "取消", "幫助"};// 自定義選項對話框int selectedOption = JOptionPane.showOptionDialog(null, "請選擇操作:", "自定義對話框", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, icon, options, options[0]);// 處理結果if (selectedOption >= 0) {JOptionPane.showMessageDialog(null, "您選擇了:" + options[selectedOption], "結果", JOptionPane.INFORMATION_MESSAGE);}}
}

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/908830.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/908830.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/908830.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    MIPI信號為什么不能進行長距離傳輸

    1.關于MIPI信號傳輸 MIPI信號是不適合長距離傳輸的。 2.MIPI的信號擺幅小&#xff0c;抗干擾能力比較弱 MIPI信號的差分擺幅比較小&#xff0c;通常只有100mV~200mV,遠遠低于LVDS的350mV的擺幅 小擺幅信號在長線纜上傳輸的時候更容易被噪聲淹沒&#xff0c;信噪比下降&#xf…

    Qt的學習(二)

    1. 創建Hello Word 兩種方式&#xff0c;實現helloworld&#xff1a; 1.通過圖形化的方式&#xff0c;在界面上創建出一個控件&#xff0c;顯示helloworld 2.通過純代碼的方式&#xff0c;通過編寫代碼&#xff0c;在界面上創建控件&#xff0c; 顯示hello world&#xff1b; …

    Windows11+VS2019配置Libigl-2.4.1

    Windows11VS2019配置Libigl-2.4.1 由于課題需要&#xff0c;所以出一篇配置Libigl的博客&#xff0c;制作不易&#xff0c;請多多點贊 一、官網下載 官網&#xff1a;https://libigl.github.io/ GitHub下載地址&#xff1a;https://github.com/libigl/libigl 這里我們選擇…

    地球科學方向(Geoscience and Remote Sensing),1天見刊,當月可檢索!

    CSP科學出版社&#xff0c;旨在通過為研究人員提供最佳環境來發表、參考、閱讀和引用他們的作品&#xff0c;從而為科學界服務。現已與科檢易學術達成出版戰略合作&#xff0c;現在聯合共同出版高質量學術水平的期刊&#xff0c;為方便廣大科研學者投稿方便&#xff0c;現已經建…

    基于 Three.js 的 3D 模型快照生成方案

    基于 Three.js 的 3D 模型快照生成方案 此方案通過 Three.js 渲染場景并異步生成圖像數據&#xff0c;同時支持分辨率縮放和 Blob 格式輸出&#xff0c;為模型預覽、截圖保存等需求提供完整解決方案。 問題分析&#xff1a; 使用html2canvas 生成的快照畫布顯示為空&#xff…

    「Java基本語法」變量的使用

    變量定義 變量是程序中存儲數據的容器&#xff0c;用于保存可變的數據值。在Java中&#xff0c;變量必須先聲明后使用&#xff0c;聲明時需指定變量的數據類型和變量名。 語法 數據類型 變量名 [ 初始值]; 示例&#xff1a;聲明與初始化 public class VariableDemo {publi…

    SpringCloud學習筆記-2

    說明&#xff1a;來源于網絡&#xff0c;如有侵權請聯系我刪除 1.提問&#xff1a;如果注冊中心宕機&#xff0c;遠程調用還能成功嗎 答&#xff1a;當微服務發起請求時&#xff0c;會向注冊中心請求所有的微服務地址&#xff0c;然后在向指定的微服務地址發起請求。在設計實…

    Hac - NBh標準JSON協議使用說明文檔

    Hac - NBh 標準 JSON 協議使用說明文檔 一、協議概述 Hac - NBh 標準 JSON 協議是專為物聯網設備與服務器數據交互設計的通信協議。以 JSON 格式為基礎,采用鍵值對(KV 值)組織數據,支持靈活選取數據項,通過 CBOR 格式實現高效傳輸,并利用 AES 128 加密保障數據安全。 …

    k8s從入門到放棄之Service負載均衡

    k8s從入門到放棄之Service負載均衡 在 Kubernetes (K8s) 中&#xff0c;Service 是一種抽象&#xff0c;它定義了一組邏輯上的 Pod 和訪問它們的策略。Service 的主要目的是提供一種可靠的方式來訪問一組具有相同標簽&#xff08;Label&#xff09;的 Pod&#xff0c;即使這些…

    【題解-洛谷】P10480 可達性統計

    題目&#xff1a;P10480 可達性統計 題目描述 給定一張 N N N 個點 M M M 條邊的有向無環圖&#xff0c;分別統計從每個點出發能夠到達的點的數量。 輸入格式 第一行兩個整數 N , M N,M N,M&#xff0c;接下來 M M M 行每行兩個整數 x , y x,y x,y&#xff0c;表示從 …

    SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服務路由報503

    文章目錄 前言一、問題二、原因1.分析2.配置靜態路由再試3.定位 總結 前言 本來昨天就應該也記錄下&#xff0c;免得忘記的&#xff0c;但是有點晚了&#xff0c;酒沒寫&#xff0c;真的是被坑慘了。 當然這也是追求最新的代價&#xff0c;也是對新技術、老知識點的重溫…

    破解路內監管盲區:免布線低位視頻樁重塑停車管理新標準

    城市路內停車管理常因行道樹遮擋、高位設備盲區等問題&#xff0c;導致車牌識別率低、逃費率高&#xff0c;傳統模式在復雜路段束手無策。免布線低位視頻樁憑借超低視角部署與智能算法&#xff0c;正成為破局關鍵。該設備安裝于車位側方0.5-0.7米高度&#xff0c;直接規避樹枝遮…

    RAG 文檔解析難點1:多欄布局的 PDF 如何解析

    寫在前面 在構建檢索增強生成 (Retrieval-Augmented Generation, RAG) 應用時,高質量的數據源是成功的基石。PDF 作為一種廣泛使用的文檔格式,承載著海量的知識。然而,許多 PDF 文檔,特別是學術論文、期刊、雜志和一些報告,都采用了多欄布局 (multi-column layout)。 直…

    全面掌握Pandas時間序列處理:從基礎到實戰

    時間序列數據在金融分析、物聯網、商業智能等領域無處不在。作為Python數據分析的核心庫&#xff0c;Pandas提供了強大而全面的時間序列處理功能。本文將系統介紹Pandas時間序列處理的各個方面&#xff0c;從基礎概念到高級應用&#xff0c;幫助您在實際工作中高效處理時間序列…

    vscode 離線安裝第三方庫跳轉庫

    我安裝的是C/C的函數跳轉 下載的離線庫&#xff1a; 項目首頁 - vscode代碼自動補全跳轉插件離線安裝包:cpptools-win32.vsix是一款專為VSCode設計的離線安裝插件&#xff0c;特別適合無法連接網絡的電腦環境。通過安裝此插件&#xff0c;您的VSCode將獲得強大的代碼自動跳轉…

    GitHub 趨勢日報 (2025年06月05日)

    &#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 1472 onlook 991 HowToCook 752 ChinaTextbook 649 quarkdown 451 scrapy 324 age…

    關于如何使用VScode編譯下載keil工程的步驟演示

    1、vscode的插件市場下載keil Assistant 2 、點設置 3、復制keil的地址 4、粘貼到第…

    OD 算法題 B卷【最大島嶼體積】

    文章目錄 最大島嶼體積 最大島嶼體積 大于0的數表示陸地&#xff0c;0表示水&#xff0c;請計算由陸地、水組成的網格中最大島嶼的體積&#xff1b;陸地的數字之和表示所在島嶼的體積&#xff0c;島嶼總是被水包圍&#xff0c;并且每座島嶼只能由水平或者垂直方向上相鄰的陸地…

    一文讀懂 Docker Compose(白話版)

    一、Docker Compose 是個啥&#xff1f; 想象你開餐廳&#xff1a; 單容器 一個廚師 &#x1f468;&#x1f373;Docker Compose 整個后廚團隊 &#x1f468;&#x1f373;&#x1f469;&#x1f373;&#x1f9d1;&#x1f373; 菜單 工作流程 用個菜單文件&#xff08;…

    Java畢業設計:WML信息查詢與后端信息發布系統開發

    JAVAWML信息查詢與后端信息發布系統實現 一、系統概述 本系統基于Java和WML(無線標記語言)技術開發&#xff0c;實現了移動設備上的信息查詢與后端信息發布功能。系統采用B/S架構&#xff0c;服務器端使用Java Servlet處理請求&#xff0c;數據庫采用MySQL存儲信息&#xff0…