歡迎到我的簡書查看我的文集 前言: 是圖形用戶界面,在 中,圖形用戶界面我們用 表示,而 的完整英文為: (圖形用戶介面), 所謂圖形用戶界面就是以圖形的方式來顯示你電腦的操作界面, 我們電腦中操作的界面就是 我們 中常說的圖形用戶界面, 這樣的操作簡單明瞭. 的英文為 , 是命令行用戶介面, ...
歡迎到我的簡書查看我的文集
前言:
GUI
是圖形用戶界面,在Java
中,圖形用戶界面我們用GUI
表示,而GUI
的完整英文為: Graphical User Interface
(圖形用戶介面), 所謂圖形用戶界面就是以圖形的方式來顯示你電腦的操作界面, 我們電腦中操作的界面就是 我們Java
中常說的圖形用戶界面, 這樣的操作簡單明瞭.
CLI
的英文為Command Line User Interface
, 是命令行用戶介面, 命令行, 這就是我們程式員常常熟悉的, 常見的Dos
命令行操作, 這些常用命令式需要記住的, CLI
的操作就不那麼直觀了.
在Java
中GUI
提供了對象在 java.awt
和 javax.swing
兩個包中
在早年中, Java.awt為抽象視窗工具包, 英文為 Abstract Window ToolKit
, 需要調用本地的系統方法來實現功能需求,屬於重量級的控制項.
而在awt
的基礎上,創建了一套圖形界面系統, 從而提供了更多的組件, 而且完全是由Java實現的, 增強了移植性, 屬於輕量級的控制項. 有自己的顯示效果, 顯示自己的形狀, 平臺要求低了, 輕量級和體統嵌入的比較淺.
繼承關係
Button
按鈕,Label
標簽,Checkbox
覆選框,TextComponent
文本組件,TextArea
文本區域,TextField
文本框.
組件裡面還能放入組件,在Java中我們叫容器.
window
窗體, Panel
面板
Frame
小視窗,Dialog
對話框,FileDialog
文件對話框
GUI
佈局
Flow
流式佈局
掃雷的格式佈局
佈局管理
常見的佈局管理器:
流式佈局管理: FlowLayout
, 是從左到右的排列, 是Panel
預設的佈局管理.
邊界佈局: 東南西北,中, 是Frame
預設的佈局管理
網格佈局管理: GridLayout
卡片佈局管理: CardLayout
網格包佈局管理: GridBagLayout
GUI
簡單的小窗體
java.awt
包含用於創建用戶界面和繪製圖形圖像的所有類.
java.awt
類 Component
java.lang.Object
-> java.awt.Component
所有已實現的介面:
ImageObserver, MenuContainer, Serializable
component
是一個具有圖形表示能力的對象.
java.awt
類 Frame
java.lang.Object
-> java.awt.Component
-> java.awt Container
-> java.awt.Window
-> java.awt.Frame
實現的介面:
ImageObserver, MenuContainer, Serializable, Accessible
直接已知的子類:
JFrame
Frame
是帶有標題和邊框的頂層視窗.
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class FrameDemo {
public static void main(String[] args) {
//1,創建一個窗體。Frame
Frame f = new Frame("my frame");
//2, 對窗體進行基本設置。
f.setSize(500, 400);
f.setLocation(400, 200);
//設置佈局。
f.setLayout(new FlowLayout());
//給窗體添加組件。
Button but = new Button("my button");
//加入一個文本框組件。
TextField tf = new TextField(40);
//將組件添加到窗體中。
f.add(tf);
f.add(but);
//1,在按鈕上添加所需的監聽器。
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按鈕被觸發了....."+e);
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
System.exit(0);
}
@Override
public void windowOpened(WindowEvent e) {
System.out.println("孔雀開屏!window open");
}
});
but.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2){
System.out.println("mouse double click");
}
}
});
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//1,如何獲取錄入的內容。通過鍵盤事件對象獲取。
// char key = e.getKeyChar();
// int code = e.getKeyCode();
// System.out.println(code+"...."+KeyEvent.getKeyText(code));
// int code = e.getKeyCode();
// if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
// System.out.println("必須是0-9數字");
// e.consume();//直接取消預設處理方式。
// }
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
System.out.println("ctrl+enter run");
}
}
});
//3,讓窗體顯示。
f.setVisible(true);
System.out.println("over");
}
}
事件監聽機制
- 事件源-組件
- 事件 -
Event
- 監聽器 -
Listener
- 事件處理
Button
java.awt
classButton
java.lang.Object
-> java.awt.Component
-> java.awt.Button
監聽事件:
addActionListener(ActionListener l)
添加指定的動作偵聽器以從此按鈕接收動作事件。
MouseListener
public interface MouseListener extends EventListener
用於在組件上接收“有趣”滑鼠事件(按,釋放,單擊,輸入和退出)的偵聽器界面。
方法的詳細信息:
mouseClicked
void mouseClicked(MouseEvent e)
在組件上單擊滑鼠按鈕時調用
mousePressed
void mousePressed(MouseEvent e)
在組件上按下滑鼠時調用
mouseReleased
void mouseReleased(MouseEvent e)
在組件上釋放滑鼠時調用
mouseEntered
void mouseEntered(MouseEvent e)
當滑鼠進入組件時調用
mouseExited
void mouseExited(MouseEvent e)
當滑鼠退出組件時調用
圖形化界面的工具
//1,獲取路徑。通過文本框對象完成。
String str_dir = jTextField1.getText();
//2,將字元串路徑封裝成File對象。
File dir = new File(str_dir);
//判斷。
if(dir.exists()&&dir.isDirectory()){
//清空文本區域。
jTextArea1.setText("");
//3,獲取文件名稱列表。
String[] names = dir.list();
for(String name :names){
//4,將名字顯示到文本區域。
jTextArea1.append(name+LINE_SEPARATOR);
}
}
public class JFileChooser extends JComponent implements Accessible
事件監聽機制流程:
- 監聽器 - 將監聽器註冊到事件源
- 事件源 - 組件 (外部動作)
- 產生事件對象 - 將事件對象傳給事件處理方式
菜單繼承
MenuComponent
MenuBar,MenuItem,Menu
達叔小生:往後餘生,唯獨有你
You and me, we are family !
90後帥氣小伙,良好的開發習慣;獨立思考的能力;主動並且善於溝通
簡書博客: 達叔小生
https://www.jianshu.com/u/c785ece603d1
結語
- 下麵我將繼續對 其他知識 深入講解 ,有興趣可以繼續關註
- 小禮物走一走 or 點贊