JAVA基礎(chǔ)-GUI
Java也提供圖像化編程
圖形化
GUI(圖形用戶界面)
GUI
1 Graphical User Interface(圖形用戶接口)
2 用圖形的方式,來(lái)顯示計(jì)算機(jī)操作的界面,這樣更方便更直觀
CLI
1 Command line User Interface (命令行用戶接口)
2 就是常見(jiàn)的Dos命令行操作
3 需要記憶一些常用的命令,操作不直觀
Java為GUI提供的對(duì)象都存在java.Awt和javax.Swing兩個(gè)包中
Awt和Swing
java.Awt:Abstract Window ToolKit(抽象窗口 工具包),需要調(diào)用本地系統(tǒng)方法實(shí)現(xiàn)功能。屬重量級(jí)控件
javax.Swing:在AWT的基礎(chǔ)上,建立的一套圖形界面系統(tǒng),其中提供了更多的組件,而且完全由Java實(shí)現(xiàn)。增強(qiáng)了移植性,屬
輕量級(jí)控件
繼承關(guān)系圖

Container:為容器,是一個(gè)特殊的組件,該組件中可以通過(guò)add方法添加其他組件進(jìn)來(lái)
布局管理器
容器中的組件的排放方式,就是布局
常見(jiàn)的布局管理器:
FlowLayout(流式布局管理器)
從左到右的順序排列
Panel默認(rèn)的布局管理器
BorderLayout(邊界布局管理器)
東,南,西,北,中
Frame默認(rèn)的布局管理器
GridLayout(網(wǎng)格布局管理器)
規(guī)則的矩陣
CardLayout(卡片布局管理器)
選項(xiàng)卡
GridBagLayout(網(wǎng)格包布局管理器)
非規(guī)則的矩陣
建立一個(gè)簡(jiǎn)單的窗體
Container常用子類(lèi):Window Panel(面板,不能單獨(dú)存在)
Window常用子類(lèi):Frame Dialog
簡(jiǎn)單的窗體創(chuàng)建過(guò)程:
Frame f = new Frame("my window");
f.setLayout(new FlowLayout());
f.setSize(500,400);//設(shè)置窗體大小
f.setLocation(300,200);//設(shè)置窗體出現(xiàn)在屏幕的位置
f.setVisible(true); //設(shè)置窗口可見(jiàn)性
事件監(jiān)聽(tīng)
事件監(jiān)聽(tīng)機(jī)制組成
事件源(組件):就是awt包或者swing包中的那些圖形界面組件
事件(Event):每一個(gè)事件源都有自己特有的對(duì)應(yīng)事件和共性事件
監(jiān)聽(tīng)器(Listener):將可以觸發(fā)某一個(gè)事件的動(dòng)作(不只一個(gè)動(dòng)作)都已經(jīng)封裝到了監(jiān)聽(tīng)器中
事件處理(引發(fā)事件后處理方式)
事件監(jiān)聽(tīng)機(jī)制流程圖

事件監(jiān)聽(tīng)機(jī)制
1 確定事件源(容器或組件)
2 通過(guò)事件源對(duì)象的addXXXListener()方法將偵聽(tīng)器注冊(cè)到該事件源上
3 該方法中接收XXXListener的子類(lèi)對(duì)象,或者XXXListener的子類(lèi)XXXAdapter的子類(lèi)對(duì)象
4 一般用匿名內(nèi)部類(lèi)來(lái)表示
5 在覆蓋方法的時(shí)候,方法的參數(shù)一般是XXXEvent類(lèi)型的變量接收
6 事件觸發(fā)后會(huì)把事件打包成對(duì)象傳遞給該變量(其中包括事件源對(duì)象。通過(guò)getSource()或者getComponent()獲?。?/p>
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class Test {
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;
private Dialog d;
private Label lab;
private Button okBut;
Test() {
init();
}
public void init() {
f = new Frame("my window");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
tf = new TextField(60);
but = new Button("轉(zhuǎn)到");
ta = new TextArea(25,70);
d = new Dialog(f,"提示信息-self",true);
d.setBounds(400,200,240,150);
d.setLayout(new FlowLayout());
lab = new Label();
okBut = new Button("確定");
d.add(lab);
d.add(okBut);
f.add(tf);
f.add(but);
f.add(ta);
myEvent();
f.setVisible(true);
}
private void myEvent() {
okBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d.setVisible(false);
}
});
d.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
d.setVisible(false);
}
});
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
});
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showDir();
}
});
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void showDir() {
String dirPath = tf.getText();
File dir = new File(dirPath);
if(dir.exists() && dir.isDirectory()) {
ta.setText("");
String[] names = dir.list();
for(String name : names) {
ta.append(name+"\r\n");
}
} else {
String info = "輸入信息錯(cuò)誤,請(qǐng)重輸";
lab.setText(info);
d.setVisible(true);
}
}
public static void main(String[] args) {
new Test();
}
}
菜單
概述
MenuBar,Menu,MenuItem
先創(chuàng)建菜單條,再創(chuàng)建菜單,每一個(gè)菜單 中建立菜單項(xiàng)
也可以菜單添加到菜單中,作為子菜單
通過(guò)setMenuBar()方法,將菜單添加到Frame中
菜單繼承體系

代碼示例
import java.awt.*;
import java.awt.event.*;
class Test {
private Frame f;
private MenuBar mb;
private Menu m,subMenu;
private MenuItem closeItem,subItem;
Test(){
init();
}
public void init(){
f = new Frame("my window");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());
mb = new MenuBar();
m = new Menu("文件");
subMenu = new Menu("子菜單");
subItem = new MenuItem("子條目");
closeItem = new MenuItem("退出");
subMenu.add(subItem);
m.add(subMenu);
m.add(closeItem);
mb.add(m);
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
private void myEvent() {
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new Test();
}
}
可執(zhí)行Jar包
1 將多個(gè)類(lèi)封裝到了一個(gè)包(package)中。
2 定義一個(gè)jar包的配置信息。
3 定義一個(gè)文件a.txt,文件內(nèi)容內(nèi)容為:Main-Class:(空格)包名.類(lèi)名(回車(chē))
4 打jar包。
jar -cvfm my.jar a.txt 包名
5 通過(guò)winrar程序進(jìn)行驗(yàn)證,查看該jar的配置文件中是否有自定義的配置信息
6 通過(guò)工具–文件夾選項(xiàng)–文件類(lèi)型–jar類(lèi)型文件,通過(guò)高級(jí),定義該jar類(lèi)型文件的打開(kāi)動(dòng)作的關(guān)聯(lián)程序
jdk\bin\javaw.exe -jar
package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Test {
private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private MenuItem openItem,saveItem,closeItem;
private FileDialog openDia,saveDia;
private File file;
Test() {
init();
}
public void init() {
f = new Frame("my window");
f.setBounds(300,100,650,600);
bar = new MenuBar();
ta = new TextArea();
fileMenu = new Menu("文件");
openItem = new MenuItem("打開(kāi)");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出");
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
f.setMenuBar(bar);
openDia = new FileDialog(f,"我要打開(kāi)",FileDialog.LOAD);
saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);
f.add(ta);
myEvent();
f.setVisible(true);
}
private void myEvent() {
saveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(file==null) {
saveDia.setVisible(true);
String dirPath = saveDia.getDirectory();
String fileName = saveDia.getFile();
if(dirPath==null || fileName==null)
return ;
file = new File(dirPath,fileName);
}
try {
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
String text = ta.getText();
bufw.write(text);
//bufw.flush();
bufw.close();
} catch (IOException ex) {
throw new RuntimeException();
}
}
});
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openDia.setVisible(true);
String dirPath = openDia.getDirectory();
String fileName = openDia.getFile();
if(dirPath==null || fileName==null)
return ;
ta.setText("");
file = new File(dirPath,fileName);
try {
BufferedReader bufr = new BufferedReader(new FileReader(file));
String line = null;
while((line = bufr.readLine()) != null) {
ta.append(line+"\r\n");
}
bufr.close();
} catch (IOException ex) {
throw new RuntimeException("讀取失敗");
}
}
});
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new Test();
}
}
以上就是JAVA基礎(chǔ)-GUI的詳細(xì)內(nèi)容,更多關(guān)于JAVA GUI的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- java GUI實(shí)現(xiàn)加法計(jì)算器
- Java實(shí)現(xiàn)的具有GUI的校園導(dǎo)航系統(tǒng)的完整代碼
- Java圖形界面GUI布局方式(小結(jié))
- java GUI實(shí)現(xiàn)ATM機(jī)系統(tǒng)(3.0版)
- JavaGUI實(shí)現(xiàn)隨機(jī)單詞答題游戲
- Java使用GUI繪制線條的示例
- 五種JAVA GUI布局管理的方式
- IntelliJ IDEA安裝插件阿里巴巴Java開(kāi)發(fā)手冊(cè)(Alibaba Java Coding Guidelines)
- 用GUI實(shí)現(xiàn)java版貪吃蛇小游戲
- java GUI實(shí)現(xiàn)五子棋游戲
- java GUI編程之paint繪制操作示例
- java GUI編程之監(jiān)聽(tīng)操作實(shí)例分析
- java GUI編程之布局控制器(Layout)實(shí)例分析
- java GUI界面初步入門(mén)示例【AWT包】
- Java的帶GUI界面猜數(shù)字游戲的實(shí)現(xiàn)示例
- JAVA圖形界面(GUI)之表格的示例代碼
- java Gui實(shí)現(xiàn)肯德基點(diǎn)餐收銀系統(tǒng)
- 教你用Java GUI實(shí)現(xiàn)文本文件的讀寫(xiě)
相關(guān)文章
Maven的pom.xml中resources標(biāo)簽的用法
本文主要介紹了Maven的pom.xml中resources標(biāo)簽的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
java編程SpringSecurity入門(mén)原理及應(yīng)用簡(jiǎn)介
Spring 是非常流行和成功的 Java 應(yīng)用開(kāi)發(fā)框架,Spring Security 正是 Spring 家族中的成員。Spring Security 基于 Spring 框架,提供了一套 Web 應(yīng)用安全性的完整解決方案2021-09-09
SSM框架中entity mapper dao service controll
這篇文章主要介紹了SSM框架中entity mapper dao service controller層的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
JVM進(jìn)階教程之字段訪問(wèn)優(yōu)化淺析
這篇文章主要給大家介紹了關(guān)于JVM進(jìn)階教程之字段訪問(wèn)優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
RedisTemplate.opsForHash()用法簡(jiǎn)介并舉例說(shuō)明
redistemplate.opsforhash是RedisTemplate模板類(lèi)中的一個(gè)方法,用于獲取操作哈希數(shù)據(jù)類(lèi)型的接口,這篇文章主要給大家介紹了關(guān)于RedisTemplate.opsForHash()用法簡(jiǎn)介并舉例說(shuō)明的相關(guān)資料,需要的朋友可以參考下2024-06-06
IntelliJ idea 如何生成動(dòng)態(tài)的JSON字符串(步驟詳解)
這篇文章主要介紹了IntelliJ idea 如何生成動(dòng)態(tài)的JSON字符串,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Java數(shù)據(jù)類(lèi)型轉(zhuǎn)換的示例詳解
Java程序中要求參與的計(jì)算的數(shù)據(jù),必須要保證數(shù)據(jù)類(lèi)型的一致性,如果數(shù)據(jù)類(lèi)型不一致將發(fā)生類(lèi)型的轉(zhuǎn)換。本文將通過(guò)示例詳細(xì)說(shuō)說(shuō)Java中數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,感興趣的可以了解一下2022-10-10
springboot集成springsession如何實(shí)現(xiàn)分布式session共享
這篇文章主要介紹了springboot集成springsession如何實(shí)現(xiàn)分布式session共享問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

