您好,登錄后才能下訂單哦!
------- android培訓、java培訓、期待與您交流! ----------
GUI(圖形用戶界面)
1、基本概念:
GUI:Graphical User Interface(圖形用戶接口)。用圖形的方式,來顯示計算機操作的界面,這樣更方便更直觀。
CLI:Command line User Interface (命令行用戶接口)。就是常見的Dos命令行操作。需要記憶一些常用的命令,操作不直觀。
Java為GUI提供的對象都存在java.Awt和javax.Swing兩個包中。
2、Awt與Swing
java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要調用本地系統方法實現功能。屬重量級控件。
javax.Swing:在AWT的基礎上,建立的一套圖形界面系統,其中提供了更多的組件,而且完全 由Java實現。增強了移植性,屬輕量級控件。
3、繼承關系圖
4、布局管理器
容器中的組件的排放方式,就是布局。
常見的布局管理器:
FlowLayout(流式布局管理器):從左到右的順序排列。Panel默認的布局管理器。
BorderLayout(邊界布局管理器):東,南,西,北,中(未指定位置的話,將最大面積填充)。Frame默認的布局管理器。
GridLayout(網格布局管理器)規則的矩陣
CardLayout(卡片布局管理器)選項卡
GridBagLayout(網格包布局管理器)非規則的矩陣
最牛的就是坐標式布局,想放哪里就放哪里。
5、建立一個簡單的窗體
Container常用子類:Window Panel(面板, 不能單獨存在。)
Window常用子類:Frame Dialog
創建圖形化界面:
1,創建frame窗體。
2,對窗體進行基本設置。
比如大小,位置,布局。
3,定義組件。
4,將組件通過窗體的add方法添加到窗體中。
5,讓窗體顯示,通過setVisible(true)
import java.awt.*; import java.awt.event.*; class AwtDemo { public static void main(String[] args) { Frame f = new Frame("my awt"); f.setSize(500,400);//設置窗體橫、縱尺寸。 f.setLocation(400,200);//設置窗體位置:距離左邊400,上邊200。 f.setLayout(new FlowLayout());//流式布局。 f.setVisible(true);//顯示窗體。 } }
6、事件監聽機制
組成:
事件源(組件):就是awt包或者swing包中的那些圖形界面組件。
事件(Event):每一個事件源都有自己特有的對應事件和共性事件。
監聽器(Listener):將可以出發某一個事件的動作(不止一個動作)都已經封裝到了監聽器中。
事件處理(引發事件后處理方式)
確定事件源(容器或組件)
通過事件源對象的addXXXListener()方法將偵聽器注冊到該事件源上。
該方法中接收XXXListener的子類對象,或者XXXListener的子類XXXAdapter的子類對象。
一般用匿名內部類來表示。
在覆蓋方法的時候,方法的參數一般是XXXEvent類型的變量接收。
事件觸發后會把事件打包成對象傳遞給該變量。(其中包括 事件源對象。通過getSource()或者,getComponent()獲取。)
活動監聽部分代碼:
f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.out.println("我關!"); System.exit(0); } public void windowActivated(WindowEvent e) { System.out.println("我活了!!"); } public void windowOpened(WindowEvent e) { System.out.println("我被打開了,哈哈哈"); } });
-------------------------------------------------
實例代碼:
通過按鈕關閉窗體。在窗體中通過按鈕創建按鈕。
import java.awt.*; import java.awt.event.*; class FrameDemo { //定義該圖形中所需的組件的引用。 private Frame f; private Button but; FrameDemo() { init(); } public void init() { f = new Frame("my frame"); //對frame進行基本設置。 f.setBounds(300,100,500,400);//設置frame的 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。 f.setLayout(new FlowLayout()); but = new Button("my button"); //將組件添加到frame中 f.add(but); //加載一下窗體事件。 myEvent(); //顯示窗體。 f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); //讓按鈕具備退出程序的功能。 /* 按鈕就是事件源。 選擇哪個監聽器呢? 通過關閉窗體示例,了解到,想要知道那個組件具備什么樣的特有監聽器。 需要查看該組件對象的功能。 通過查閱button的描述,發現按鈕支持一個特有堅挺addActionListener(ActionListener l) */ but.addActionListener(new ActionListener()//不需要適配器,Adapter。監聽器中方法超過三個的一般都有適配器。 { public void actionPerformed(ActionEvent e) { System.out.println("退出,按鈕干的"); System.exit(0); } }); } public static void main(String[] args) { new FrameDemo(); } }
熟悉鍵盤事件與鼠標事件
import java.awt.*; import java.awt.event.*; class MouseAndKeyEvent { private Frame f; private Button but; private TextField tf; MouseAndKeyEvent() { init(); } public void init() { f = new Frame("my frame"); f.setBounds(300,100,500,400); f.setLayout(new FlowLayout()); tf = new TextField(20);//設定列數。 but = new Button("my button"); f.add(tf); f.add(but); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)) { System.out.println(code+"非法"); e.consume(); } } }); //給but添加一個鍵盤監聽。 but.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //組合鍵 if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER) System.exit(0); //獲取對應的鍵盤字符串。 System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"---"+e.getKeyCode()); } }); //活動監聽。 but.addActionListener(new ActionListener()//鍵盤能操作,空格。 { public void actionPerformed(ActionEvent e) { System.out.println("action ok"); } }); /* //鼠標監聽。 but.addMouseListener(new MouseAdapter() { private int count = 1; private int count1 = 1; public void mouseEntered(MouseEvent e) { System.out.println("鼠標進入到該組件"+count++); } public void mouseClicked(MouseEvent e) { if (e.getClickCount()==2) System.out.println("雙擊動作"+count1++); } }); */ } public static void main(String[] args) { new MouseAndKeyEvent(); } }
菜單
MenuBar,Menu,MenuItem
先創建菜單條,再創建菜單,每一個菜單 中建立菜單項。
也可以菜單添加到菜單中,作為子菜單。
通過setMenuBar()方法,將菜單添加到Frame中。
練習:完成一個簡單的記事本程序。
package mymenu; import java.awt.*; import java.awt.event.*; import java.io.*; public class MyMenuTest { private Frame f; private MenuBar bar; private TextArea ta; private Menu fileMenu; private MenuItem closeItem,openItem,saveItem; private FileDialog openDia,saveDia; private File file; MyMenuTest() { init(); } public void init() { f = new Frame("my window"); f.setBounds(300,100,700,500); bar = new MenuBar();//菜單欄 ta = new TextArea(); fileMenu = new Menu("文件");//菜單。 closeItem = new MenuItem("退出");//菜單項。 openItem = new MenuItem("打開"); saveItem = new MenuItem("保存"); //subMenu = new Menu("子菜單"); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(closeItem); bar.add(fileMenu); f.setMenuBar(bar); f.add(ta); openDia = new FileDialog(f,"我要打開",FileDialog.LOAD);//模式默認為打開。 saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE); myEvent(); f.setVisible(true); } public void myEvent() { 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+"\t\n"); } bufr.close(); } catch (IOException ex) { throw new RuntimeException("讀取失敗"); } } }); 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.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 MyMenuTest(); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。