GUI圖形使用者介面的基本使用
GUI可以說在java中並不能稱為十分重要的一步,但是,我們在學習的時候由於需要記憶大量的東西,這些也十分不利於我們後來的學習,但是有的知識又是在後來的學習中不可或缺的,所以,現在在回顧的時候希望可以把它形成文字,為自己也為他人創造一點方便,將零碎的知識點記下來,時常翻看,也可以收穫良多,ps:似乎也作為一個自己的學習記錄呢~
1. 列表內容
AWT:依賴底層,重量級
Swing:跨平臺,輕量級,依賴低,任何系統均可使用
2. 整體架構
元件排列的方式(也稱佈局)
流式:預設居中,從左到右
邊界:上北下南左西右東中 預設的是最大填充窗體 (Frame預設的是邊界佈局)
網格:元件是在格子內 (計算器)
網格包式:佔兩格
卡片式:常見的選項卡
3. 簡單的小例子
F.setsize( 橫,縱) 橫——距離左邊 縱——距離右邊
在實際的工作中
① 設定frame佈局
② 設定按鈕等元件並加入到面板panel中
③ 設定面板的佈局管理器
④ 設定frame的佈局管理器
⑤ 將panel加入到frame
public static void main(String[] args) {
Frame f=new Frame();
f.setSize(500, 100);
f.setLocation(200, 500);
// f.setLayout(new FlowLayout()); //預設居中
f.setLayout(new BorderLayout()); //預設最大填充窗體
Button b=new Button("按鈕1");
f.add(b); //向裡面新增元件
f.setVisible(true);
// System.out.println("h1"); 仍然會執行
}
4. 事件監聽機制
5. 視窗關閉
方法一:使用windowAdapter 可以只需要複寫需要重寫 的類,不需要全部重寫
public class FrameDemo05_01 {
public static void main(String[] args) {
Frame f=new Frame();
f.setSize(500, 100);
f.setLocation(200, 500);
f.setLayout(new FlowLayout());
Button b=new Button("按鈕1");
f.add(b);
//1.為事件源新增監聽 採用繼承extends WindowAdapter 只用複寫windowClosing()
f.addWindowListener(new MyWin1());
f.setVisible(true);
}
}
class MyWin1 extends WindowAdapter{
//2.有監聽器監聽的動作發生 點選關閉
//3.產生事件物件
//4.將事件物件傳遞給事件處理方式
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.exit(0);
// System.out.println("視窗關閉"+e.toString());
}
}
方法二:採用匿名類的方法
public class FrameDemo05_02 {
public static void main(String[] args) {
Frame f=new Frame();
f.setSize(500, 100);
f.setLocation(200, 500);
f.setLayout(new FlowLayout());
Button b=new Button("按鈕1");
f.add(b);
//為視窗新增監聽 addWindowListener 傳遞 new WindowAdapter() 匿名物件
f.addWindowListener(new WindowAdapter() {
//1.重寫視窗關閉事件
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.exit(0);
// System.out.println("視窗關閉"+e.toString());
}
//2.重寫視窗開啟事件
@Override
public void windowOpened(WindowEvent e) {
// TODO 自動生成的方法存根
System.out.println("視窗開啟");
}
//3.重寫視窗活動事件
@Override
public void windowActivated(WindowEvent e) {
// TODO 自動生成的方法存根
System.out.println("視窗活動");
}
});
f.setVisible(true);
}
}
6. 實現事件和介面的分離
/**
* 事件和介面分開了
*
* //1.為視窗新增監聽 addWindowListener
* //2.為按鈕新增點選監聽 addActionListener ActionListener是一個介面,裡面的方法必須實現
* @author helen
* 上午11:32:07
*/
public class FrameDemo06 {
private Frame f;
private Button btn;
FrameDemo06(){
init();
}
public void init(){
f=new Frame("my frame");
f.setBounds(300, 100, 500, 400);
f.setLayout(new FlowLayout());
btn=new Button("我是按鈕。");
f.add(btn);
//載入一下窗體上事件。
event(); //監聽事件
f.setVisible(true);
}
public void event(){
//1.為視窗新增監聽 addWindowListener
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.exit(0);
}
});
/*
按鈕就是事件源。
那麼選擇哪個監聽器呢?
通過關閉窗體示例瞭解到,想要知道哪個元件具備什麼樣的特有監聽器。
需要檢視該元件物件的功能。
通過查閱button的描述。發現按鈕支援一個特有監聽addActionListener。
*/
//2.為按鈕新增點選監聽 addActionListener ActionListener是一個介面,裡面的方法必須實現
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自動生成的方法存根
System.out.println("按鈕事件");
// System.exit(0);
}
});
}
public static void main(String[] args) {
new FrameDemo06();
}
}
7. 各種監聽事件
監聽也分為多種: 活動監聽 窗體監聽 滑鼠監聽
活動監聽—>返回活動事件 (ActionListener 沒有介面卡) 一般是button按鈕的點選
btn.addActionListener
窗體監聽—>返回窗體事件 (實現WindowListener 或者是 繼承 WindowAdapter )
f.addWindowListener
滑鼠監聽—>返回滑鼠事件 (匿名物件MouseAdapter MouseAdapter 實現了 MouseListener )
btn.addMouseListener
鍵盤監聽—>返回鍵盤事件 (匿名物件KeyAdapter KeyAdapter實現了 KeyListener)
btn.addKeyListener
繼承 WindowAdapter :可以只用實現自己需要的
實現WindowListener :需要寫出所有的
鍵盤事件
/**
* //1.新增滑鼠監聽事件addMouseListener 匿名物件MouseAdapter MouseAdapter 實現了 MouseListener
* @author helen
* 下午12:30:26
*/
public class frameDemo07 {
private Frame f;
private Button btn;
frameDemo07(){
init();
}
public void init(){
f=new Frame("我是標題");
f.setBounds(300, 100, 500, 400);
f.setLayout(new FlowLayout());
btn=new Button("我是按鈕。");
f.add(btn);
event();
f.setVisible(true);
}
public void event(){
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.exit(0);
}
});
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自動生成的方法存根
System.out.println("action ok!");
}
});
//1.新增滑鼠監聽事件addMouseListener 匿名物件MouseAdapter MouseAdapter 實現了 MouseListener
btn.addMouseListener(new MouseAdapter() {
private int count=0;
private int clickcount=0;
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("滑鼠進入到元件"+(count++));
}
/*@Override
public void mouseClicked(MouseEvent e) {
// TODO 自動生成的方法存根
System.out.println("滑鼠點選元件"+(clickcount++));
}
*/
@Override
public void mouseClicked(MouseEvent e) {
// TODO 自動生成的方法存根
if(e.getClickCount()==2){
System.out.println("滑鼠雙擊元件"+(clickcount++));
}
}
});
}
public static void main(String[] args) {
new frameDemo07();
}
}
滑鼠事件
public class FrameDemo08 {
private Frame f;
private Button btn;
private TextField tf;
FrameDemo08(){
init();
}
public void init(){
f=new Frame("我是標題");
f.setBounds(300, 100, 500, 400);
f.setLayout(new FlowLayout());
btn=new Button("我是按鈕。");
tf=new TextField(20);
f.add(tf);
f.add(btn);
event();
f.setVisible(true);
}
public void event(){
//新增視窗監聽
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.exit(0);
}
});
//新增鍵盤監聽
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
// TODO 自動生成的方法存根
int code=e.getKeyCode();
if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9)){
System.out.println(code+"非法");
e.consume();
}
}
});
//新增鍵盤監聽
btn.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
// TODO 自動生成的方法存根
if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
System.exit(0);
}
/*if(e.getKeyCode()==KeyEvent.VK_ENTER){
System.exit(0);
}*/
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
System.out.println("ctrl enter are run");
}
System.out.println(e.getKeyChar()+"--"+e.getKeyCode());
System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"**"+e.getKeyCode());
}
});
}
public static void main(String[] args) {
new FrameDemo08();
}
}
總結:
① 新增事件源
② 確定事件
③ 確定監聽器
④ 確定操作誰
8. 監聽小例子
內容轉移
/**
* 內容轉移
* @author helen
* 下午12:41:24
*/
public class FrameDemo09 {
Frame frame;
TextField tf;
Button btn;
TextArea ta;
public FrameDemo09(){
MyInit();
}
public void MyInit(){
frame=new Frame("我的視窗");
frame.setBounds(100, 100,600, 500);
frame.setLayout(new FlowLayout());
tf=new TextField(60);
btn=new Button("login ");
ta=new TextArea(25,70);
frame.add(tf);
frame.add(btn);
frame.add(ta);
MyEvent();
frame.setVisible(true);
}
private void MyEvent() {
// TODO 自動生成的方法存根
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.out.println("關閉視窗");
System.exit(0);
}
});
//點選button,內容轉移
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自動生成的方法存根
String text=tf.getText();
ta.setText(text);
tf.setText("");
System.out.println("text:"+text);
}
});
}
public static void main(String[] args) {
new FrameDemo09();
}
}
輸入路徑,列印下面的所有檔案和資料夾 (沒有做錯誤處理)
public class FrameDemo09_2 {
Frame frame;
TextField tf;
Button btn;
TextArea ta;
public FrameDemo09_2(){
MyInit();
}
public void MyInit(){
frame=new Frame("我的視窗");
frame.setBounds(100, 100,600, 500);
frame.setLayout(new FlowLayout());
tf=new TextField(60);
btn=new Button("login ");
ta=new TextArea(25,70);
frame.add(tf);
frame.add(btn);
frame.add(ta);
MyEvent();
frame.setVisible(true);
}
private void MyEvent() {
// TODO 自動生成的方法存根
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.out.println("關閉視窗");
System.exit(0);
}
});
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自動生成的方法存根
String dirname=tf.getText();
File dir=new File(dirname);
if(dir.exists()&&dir.isDirectory()){
ta.setText("");
String[] names=dir.list();
for(String name:names){
ta.append(name+"\r\n");
}
}
}
});
}
public static void main(String[] args) {
new FrameDemo09_2();
}
}
9. 對話方塊的使用
在上邊的例子中,做出了當輸入路徑錯誤時候的判斷 (如果設定了模式為true 表示:Dialog 點選後才能繼續操作)
/**
* 列印路徑下的檔案的目錄
* @author helen
* 下午12:41:57
*/
public class FrameDemo10 {
private Frame frame;
private TextField tf;
private Button btn;
private TextArea ta;
private Dialog d;
private Label l;
private Button btnmessage;
public FrameDemo10() {
MyInit();
}
public void MyInit() {
frame = new Frame("我的視窗");
frame.setBounds(100, 100, 600, 500);
frame.setLayout(new FlowLayout());
tf = new TextField(60);
btn = new Button("login ");
ta = new TextArea(25, 70);
//此時的d是作為一個獨立的窗體 設定佈局
d = new Dialog(frame, "提示資訊", true);
d.setBounds(400, 200, 240, 150); //仍然是相對於整個電腦的左上角
d.setLayout(new FlowLayout());
l = new Label();
btnmessage = new Button("確定");
d.add(l);
d.add(btnmessage);
frame.add(tf);
frame.add(btn);
frame.add(ta);
MyEvent();
frame.setVisible(true);
}
private void MyEvent() {
//給frame加上視窗監聽器
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.out.println("關閉視窗");
System.exit(0);
}
});
//給d加上視窗監聽器 關閉視窗d
d.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
d.setVisible(false);
// System.out.println("關閉視窗d");
// System.exit(0);
}
});
//tf加上監聽 輸入換行結束輸入,並且顯示所有路徑
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
// TODO 自動生成的方法存根
if(e.getKeyCode()==KeyEvent.VK_ENTER){
showDir();
}
}
});
//btn加上監聽 顯示所有路徑
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showDir();
}
});
//給對話方塊 中的按鈕btnmessage加上監聽
btnmessage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d.setVisible(false);
}
});
}
public void showDir(){
// TODO 自動生成的方法存根
String dirname = tf.getText();
File dir = new File(dirname);
if (dir.exists() && dir.isDirectory()) {//正確獲得路徑資訊
ta.setText("");
String[] names = dir.list();
for (String name : names) {
ta.append(name + "\r\n");
}
}else{//不正確獲得資訊
String info="輸入的資訊:"+dirname+"錯誤,重新輸入";
l.setText(info);
d.setVisible(true);
}
}
public static void main(String[] args) {
new FrameDemo10();
}
}
10. 簡單的記事本
/**
* 記事本
* @author helen
* 下午12:43:17
*/
public class FrameDemo11 {
private Frame frame;
private MenuBar mb;
private Menu menu, submenu;
private MenuItem mitem, subitem;
private MenuItem openitem, saveitem;
private FileDialog opendia, savedia;
private File file;
private TextArea ta;
public FrameDemo11() {
MyInit();
}
public void MyInit() {
frame = new Frame("我的視窗");
frame.setBounds(100, 100, 650, 500);
// frame.setLayout(new FlowLayout());
mb = new MenuBar();
menu = new Menu("檔案");
submenu = new Menu("子選單");
mitem = new MenuItem("退出");
subitem = new MenuItem("子條目");
openitem = new MenuItem("開啟");
saveitem = new MenuItem("儲存");
ta = new TextArea();
submenu.add(subitem);
menu.add(submenu);
menu.add(saveitem);
menu.add(openitem);
menu.add(mitem);
mb.add(menu);
frame.setMenuBar(mb);
opendia = new FileDialog(frame, "我是開啟", FileDialog.LOAD);
savedia = new FileDialog(frame, "我是儲存", FileDialog.SAVE);
frame.add(ta);
MyEvent();
frame.setVisible(true);
}
private void MyEvent() {
//窗體事件
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO 自動生成的方法存根
System.out.println("關閉視窗");
System.exit(0);
}
});
//動作事件
mitem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自動生成的方法存根
System.out.println("關閉視窗");
System.exit(0);
}
});
//動作事件
openitem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自動生成的方法存根
opendia.setVisible(true);
String dirPath = opendia.getDirectory();
String fileName = opendia.getFile();
System.out.println(dirPath + "--" + fileName);
if (dirPath == null || fileName == null)
return;
ta.setText("");
File file = new File(dirPath, fileName);
try {
FileReader fr = new FileReader(file);
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while ((line = bufr.readLine()) != null) {
ta.append(line + "\r\n");
}
bufr.close();
} catch (IOException e1) {
throw new RuntimeException("讀取失敗");
}
}
});
saveitem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自動生成的方法存根
if (file==null) {
savedia.setVisible(true);
String dirPath = savedia.getDirectory();
String fileName = savedia.getFile();
System.out.println(dirPath + "--" + fileName);
if (dirPath == null || fileName == null)
return;
file = new File(dirPath, fileName);
}
try{
FileWriter fw=new FileWriter(file);
BufferedWriter bufw=new BufferedWriter(fw);
String text=ta.getText();
bufw.write(text);
bufw.flush();
bufw.close();
}catch(IOException eq){
throw new RuntimeException("儲存失敗");
}
}
});
}
public static void main(String[] args) {
new FrameDemo11();
}
}
相關推薦
GUI圖形使用者介面的基本使用
GUI可以說在java中並不能稱為十分重要的一步,但是,我們在學習的時候由於需要記憶大量的東西,這些也十分不利於我們後來的學習,但是有的知識又是在後來的學習中不可或缺的,所以,現在在回顧的時候希望可以把它形成文字,為自己也為他人創造一點方便,將零碎的知識點記下來
(雲伺服器)安裝GUI圖形化介面(已解決)
伺服器:Vultr OS:Ubuntu 14.04 步驟: 1.遠端登陸到伺服器 2.確保所有的包和依賴關係是最新的 apt-get update 1 3.安裝LXDE Minimalist apt-get install -y lubuntu-cor
第四十九講 GUI(圖形使用者介面)
GUI的簡單概述 Graphical User Interface(圖形使用者介面),用圖形的方式,來顯示計算機操作的介面,這樣更方便更直觀。與之相對應的Command line User Interface (命令列使用者介面),就是常見的Dos命令列操作,需要記憶一些常用的命令,
(轉)Vultr(雲伺服器)安裝GUI圖形化介面(已解決)
伺服器:Vultr OS:Ubuntu 14.04 步驟: 1.遠端登陸到伺服器 2.確保所有的包和依賴關係是最新的 apt-get update 1 3.安裝LXDE Minimalist apt-get install -y lubuntu-core 1 4.
python 實現GUI(圖形使用者介面)程式設計
Python支援多種圖形介面的第三方庫,包括: wxWidgets Qt GTK Tkinter: Tkinter 模組(Tk 介面)是 Python 的標準 Tk GUI 工具包的介面 .Tk 和 Tkinter 可以在大多數的 Unix 平臺下使用
GUI(圖形使用者介面)
四、GUI案例 public class FrameDemo { public static void main(String[] args) { // 建立窗體物件 Frame f = new Frame("窗體關閉案例"); // 設定窗體標題 f.setTitle("HelloWor
java的GUI(圖形使用者介面)
GUI英文全稱為Graphical User Interface(圖形使用者介面) CLI英文全稱為Command Line User Interface(命令列使用者介面) 在java中圖形介面用兩個包分別是Awt和Swing java.awt:Abstract Win
linux系統中firewalld防火牆管理工具firewall-config(GUI圖形使用者介面)
firewall-config是firewalld防火牆管理工具的GUI(圖形使用者介面)版本,幾乎可以實現所有以命令列來執行的操作。 firewall-config的介面如下圖(在終端直接執行firewall-config即彈出),其功能如下: 1:選擇執行時(Runtime)和永久(Per
Java基本功練習十七GUI(圖形使用者介面基礎【基本概念及其使用、三種佈局管理器實現同樣的框架練習】)
為Java GUI程式設計而設計的API是應用面向物件原理的絕佳範例。 本博文主要講解 第一,介紹Java GUI程式設計的基礎知識。 第二,它使用GUI演示面向物件程式設計。 尤其是將介紹Java GUI API的框架結構,討論GUI元件及元件之間的相互關係、容器和佈局管
Java基礎總結之GUI圖形介面程式設計
GUI和CLI: GUI:(Graphical User Interface)圖形使用者介面:用圖形的方式顯示計算機的操作介面。 CLI:(Command Line User Interface)命令列使用者介面:常見的Dos命令列操作。 awt和swing: awt:(Abstra
ubuntu 圖形化介面 gui 桌面版 root登入 sorry,that didn't work.please try again! 抱歉,認證失敗。請重試
出現這種問題,用下面的方法就行了 https://jingyan.baidu.com/article/bad08e1e224b2709c85121f1.html 而且我發現,因為我用的是英文版的ubuntu,搜了一圈之後發現搜不到解決方法,然後有個人用的是中文版ubuntu
java-圖形使用者介面(GUI)之AWT程式設計-整體思路與程式碼架構
1、整體思路 任何視窗都可以被分解成一個空的容器,容器中盛放了大量的基本元件,通過設定這些基本元件的大小、位置等屬性,就可以將該空的容器和基本元件組成一個整體的視窗。具體實現思路: 1)建立一個Frame頂層視窗 2)設定頂層視窗的佈局(如果需要的話):f.setLayout(new xxx
Java內容梳理(21)API學習(9)GUI圖形介面
1、GUI介紹 GUI程式設計:使用者圖形介面,軟體介面程式設計 Java中的GUI程式設計技術:AWT;Swing(AWT的擴充套件);SWT;JavaFx 2、Swing程式設計 元件: 組成軟體介面的零件;包括容器,控制元件,主題 控制元件: 與使用者發
筆記 Data Processing Using Python 5(GUI和圖形化介面)
繼承:私有屬性和方法 預設情況下,python類的成員屬性和方法都是public。 提供“訪問控制符號”來限定成員函式的訪問。 雙下劃線--—_var屬性會被_classname_var替換,將防止父類與子類中的同名衝突。 單下劃線———在屬性名前使用一個
如何在CentOS7下安裝GUI圖形介面
1、如何在CentOS7下安裝GUI圖形介面 當你安裝CentOS7伺服器版本的時候,系統預設是不會安裝GUI的圖形介面程式,這個需要手動安裝CentOS7 Gnome GUI包。 2、在系統下使用命令安裝gnome圖形介面程式 在安裝Gnome
Java 圖形使用者介面(GUI)佈局管理器
元件不能單獨存在,必須放置於容器中,元件在容器中的位置和尺寸是由佈局管理器來決定的 FlowLayout(流式佈局管理器) BoderLayout(邊界佈局管理器) GridLayout(網格佈局管理器) GridBagLayout(網格包佈局管理器) CardLa
(個人筆記)2018-11-11 圖形使用者介面(GUI)
1. 程式碼規範: /** * 邊界佈局BorderLayout使用演示 * 1、繼承JFrame * 2、定義你需要的各個元件 * 3、建立元件(在私有的初始化方法中) * 4、新增元件(在私有的初始化方法中) * 5、設定佈局管理器,流式佈局預設為
Java 圖形化介面設計(GUI)實戰練習(程式碼)
關於Java圖形化介面設計,基礎知識網上可搜,下面簡單介紹一下重點概念,然後就由淺入深程式碼例項。 程式是為了方便使用者使用的,Java引入圖形化介面程式設計。 1.JFrame 是容器類 2.AWT 是抽象視窗元件工具包,是 Java 最早的用於編寫圖形節目應用程
黑馬程式設計師——Java GUI(圖形使用者介面)
-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ GUI(圖形使用者介面) 一、概述 1.什麼是GUI? GUI(Graphical User Interface)是使用者與作業系統進行互動的一種
java gui圖形介面程式設計
轉載學習轉自:https://blog.csdn.net/u012891055/article/details/50095365看了下網上的gui教程都沒有什麼比較好的,不管是java、安卓還是ios,設計UI都應該先從佈局上來考慮,而不是看一點寫一點。如果你一來就想著用絕對