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常用子類:Window Panel(面板,不能單獨(dú)存在)
Window常用子類: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的子類對(duì)象,或者XXXListener的子類XXXAdapter的子類對(duì)象
4 一般用匿名內(nèi)部類來(lái)表示
5 在覆蓋方法的時(shí)候,方法的參數(shù)一般是XXXEvent類型的變量接收
6 事件觸發(fā)后會(huì)把事件打包成對(duì)象傳遞給該變量(其中包括事件源對(duì)象。通過(guò)getSource()或者getComponent()獲取)
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+'rn');}} 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è)類封裝到了一個(gè)包(package)中。
2 定義一個(gè)jar包的配置信息。
3 定義一個(gè)文件a.txt,文件內(nèi)容內(nèi)容為:Main-Class:(空格)包名.類名(回車)
4 打jar包。jar -cvfm my.jar a.txt 包名
5 通過(guò)winrar程序進(jìn)行驗(yàn)證,查看該jar的配置文件中是否有自定義的配置信息
6 通過(guò)工具?文件夾選項(xiàng)?文件類型?jar類型文件,通過(guò)高級(jí),定義該jar類型文件的打開(kāi)動(dòng)作的關(guān)聯(lián)程序jdkbinjavaw.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+'rn');}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)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. html中的form不提交(排除)某些input 原創(chuàng)2. ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享3. ASP常用日期格式化函數(shù) FormatDate()4. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫特效5. asp.net core項(xiàng)目授權(quán)流程詳解6. XMLHTTP資料7. vue使用moment如何將時(shí)間戳轉(zhuǎn)為標(biāo)準(zhǔn)日期時(shí)間格式8. CSS3中Transition屬性詳解以及示例分享9. jsp文件下載功能實(shí)現(xiàn)代碼10. 開(kāi)發(fā)效率翻倍的Web API使用技巧
