Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體
GUI全程是Graphical User Interface,即圖形用戶界面。顧名思義,GUI就是可以讓用戶直接操作的圖形化界面,包括窗口、菜單、按鈕、工具欄和其他各種圖形界面元素。目前,圖形用戶界面已經(jīng)成為一種趨勢,幾乎所有的程序設(shè)計語言都提供了GUI設(shè)計功能。
Java針對GUI設(shè)計提供了豐富的類庫,這些類分別位于java.awt和javax.swing包中,簡稱為AWT和Swing。AWT引入了大量的Windows函數(shù),因此稱為中重量級組件。Swing是以AWT為基礎(chǔ)構(gòu)建起來的輕量級的圖形界面組件,在java的圖形界面開發(fā)中使用更多,本文將對Swing相關(guān)知識進(jìn)行講解。
Swing概述:
Swing是Java語言開發(fā)圖形化界面的一個工具包。它以抽象窗口工具包(AWT)為基礎(chǔ),使跨平臺應(yīng)用程序可以使用可插拔的外觀風(fēng)格。Swing擁有豐富的庫和組件,使用非常靈活,開發(fā)人員只用很少的代碼就可以創(chuàng)建出良好的用戶界面。
在Java中,所有的Swing組件都保存在javax.swing包中,為了有效地使用Swing組件,必須了解Swing包的層次結(jié)構(gòu)和繼承關(guān)系。
Swing組件的所有類都繼承自Container類,然后根據(jù)GUI開發(fā)的功能擴(kuò)展了兩個主要的分支,分別是容器分支和組件分支。其中,容器分支是為了實現(xiàn)圖形化用戶界面窗口的容器而設(shè)計的,而組件分支則是為了實現(xiàn)向容器中填充數(shù)據(jù)、元素和交互組件等功能。
在容器分支中,Swing組件類中有3個組件是繼承的AWT的Window類,而不是繼承自JComponent類,這3個組件是Swing中的頂級容器類,它們分別是JWindow、JFrame和JDialog。其中,JFrame和JDialog是最簡單也是最常用的頂級容器,本文將對這兩種頂級容器的基本使用方法進(jìn)行詳細(xì)講解。
JFrame,它是一個獨(dú)立存在的頂級容器(也稱窗口),不能放置在其他容器中。JFrame支持通用窗口的所有基本功能,例如窗口最小化、設(shè)定窗口大小等。
JFrame案例:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class GUI_1JFrame常用方法 extends JFrame {
public static void main(String[] args) {
//使用SwingUtilities工具調(diào)用createAndShowGUI()方法顯示GUI程序
SwingUtilities.invokeLater(GUI_1JFrame常用方法::createAndShowGUI);
}
private static void createAndShowGUI() {
//創(chuàng)建并設(shè)置JFrame容器窗口
JFrame frame = new JFrame("JFrameText");
//設(shè)置并關(guān)閉窗口時的默認(rèn)操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//設(shè)置窗口標(biāo)題
frame.setTitle("窗口");
//設(shè)置窗口尺寸
frame.setSize(350, 300);
//設(shè)置窗口顯示位置
frame.setLocation(300, 200);
//讓組件顯示
frame.setVisible(true);
//改變窗口圖標(biāo)
Image image;
try{ image= ImageIO.read(new File("圖片路徑"));
frame.setIconImage(image);
}catch (IOException e){
e.printStackTrace();
}
//獲取標(biāo)題
System.out.println(frame.getTitle());
}
}JDialog,它是Swing的另一個頂級容器,它與Dialog一樣都表示對話框窗口。JDialog對話框可分為兩種,分別是模態(tài)對話框和非模態(tài)對話框。模態(tài)對話框是指用戶需要處理完當(dāng)前對話框后才能繼續(xù)與其他窗口交互對話框,而非模態(tài)對話框是允許用戶處理對話框的同時與其他窗口交互的對話框。
JDialog案例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class jdialog {
public static void main(String[] args) {
//建立兩個按鈕
JButton btn1=new JButton("模態(tài)對話框");
JButton btn2=new JButton("非模態(tài)對話框");
//創(chuàng)建并設(shè)置JFrame容器窗口
JFrame f=new JFrame("DialogDemo");
//設(shè)置窗口尺寸
f.setSize(300,250);
//設(shè)置窗口顯示位置
f.setLocation(300,200);
f.setLayout(new FlowLayout());//為內(nèi)容面板設(shè)置布局管理器
//在Container對象上添加按鈕
f.add(btn1);
f.add(btn2);
//設(shè)置單擊關(guān)閉按鈕默認(rèn)關(guān)閉窗口
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//讓組件顯示
f.setVisible(true);
final JLabel label=new JLabel();
//定義一個JDialog對話框
final JDialog dialog=new JDialog(f,"Dialog");
dialog.setSize(220,150);//設(shè)置對話框大小
dialog.setLocation(350,250);//設(shè)置對話框位置
dialog.setLayout(new FlowLayout());//設(shè)置布局管理器
final JButton btn3=new JButton("確定");//創(chuàng)建按鈕對象
dialog.add(btn3);//在對話框的內(nèi)容面板添加按鈕
//為“模態(tài)對話框”按鈕添加單擊事件
btn1.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//設(shè)置對話框為模態(tài)
dialog.setModal(true);
//如果JDialog窗口中沒有添加JLabel標(biāo)簽,就把JLabel標(biāo)簽加上
if(dialog.getComponents().length==1){
dialog.add(label);
}
//否則修改標(biāo)簽的內(nèi)容
label.setText("模態(tài)對話框,單擊確定按鈕關(guān)閉");
//顯示對話框
dialog.setVisible(true);
}
});
//為“非模態(tài)對話框”按鈕添加單擊事件
btn2.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//設(shè)置對話框為非模態(tài)
dialog.setModal(false);
//如果JDialog窗口中沒有添加JLabel標(biāo)簽,就把JLabel標(biāo)簽加上
if(dialog.getComponents().length==1){
dialog.add(label);
}
//否則修改標(biāo)簽的內(nèi)容
label.setText("非模態(tài)對話框,單擊確定按鈕關(guān)閉");
//顯示對話框
dialog.setVisible(true);
}
});
//為對話框中的按鈕添加單擊事件
btn3.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
}
}補(bǔ)充小知識:JPanel
擴(kuò)展上面的JFrame案例
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class GUI_1常用方法 extends JFrame {
public static void main(String[] args) {
//使用SwingUtilities工具調(diào)用createAndShowGUI()方法顯示GUI程序
SwingUtilities.invokeLater(GUI_1常用方法::createAndShowGUI);
}
private static void createAndShowGUI() {
//創(chuàng)建并設(shè)置JFrame容器窗口
JFrame frame = new JFrame("JFrameText");
//設(shè)置并關(guān)閉窗口時的默認(rèn)操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//設(shè)置窗口標(biāo)題
frame.setTitle("窗口");
//設(shè)置窗口尺寸
frame.setSize(350, 300);
//設(shè)置窗口顯示位置
frame.setLocation(300, 200);
//讓組件顯示
frame.setVisible(true);
//改變窗口圖標(biāo)
Image image;
try{ image= ImageIO.read(new File("圖片路徑"));
frame.setIconImage(image);
}catch (IOException e){
e.printStackTrace();
}
//獲取標(biāo)題
System.out.println(frame.getTitle());
//創(chuàng)建JPanel對象
JPanel jp=new JPanel();
//設(shè)置字體大小
Font font=new Font("仿宋",Font.BOLD,20);
//JLabel() ==>創(chuàng)建一個沒有圖像的 JLabel實例,標(biāo)題為空字符串。
//JLabel(String text) ==>使用指定的文本創(chuàng)建一個 JLabel實例。
JLabel jl1=new JLabel("用戶名:");
jl1.setFont(font);//設(shè)置統(tǒng)一的字體,看起來更美觀整齊
//JTextField(String text) ==>構(gòu)造一個新的 TextField ,用指定的文本初始化。
JTextField jf1=new JTextField("請輸入用戶名:",20);
jf1.setFont(font);//設(shè)置統(tǒng)一的字體
JLabel jl2=new JLabel("密碼:");
jl2.setFont(font);//設(shè)置統(tǒng)一的字體
JTextField jf2=new JTextField("請輸入密碼:",20);
jf2.setFont(font);//設(shè)置統(tǒng)一的字體
//建立按鈕
JButton jb1=new JButton("登錄");
jb1.setFont(font);//設(shè)置統(tǒng)一的字體
JButton jb2=new JButton("退出");
jb2.setFont(font);//設(shè)置統(tǒng)一的字體
//將這些文本和按鈕添加到JPanel對象中,然后再將JPanel對象添加到JFrame對象中去
jp.add(jl1);
jp.add(jf1);
jp.add(jl2);
jp.add(jf2);
jp.add(jb1);
jp.add(jb2);
frame.add(jp);
//讓組件顯示
frame.setVisible(true);
}
}到此這篇關(guān)于Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體的文章就介紹到這了,更多相關(guān)Java GUI創(chuàng)建窗體內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
DoytoQuery中的關(guān)聯(lián)查詢方案示例詳解
這篇文章主要為大家介紹了DoytoQuery中的關(guān)聯(lián)查詢方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Java數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹詳解
二叉搜索樹作為一個經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹的原理與實現(xiàn),需要的可以參考一下2022-06-06
大廠禁止SpringBoot在項目使用Tomcat容器原理解析
這篇文章主要為大家介紹了大廠禁止SpringBoot在項目使用Tomcat原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07

