黑马程序员_Java基础GUI
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ----------
GUI:Graphical User Interface(圖形用戶接口)
很實用的兩個包:
java.Awt:(Abstract Window ToolKit抽象窗口工具包)需要調用本地系統方法實現功能.屬重量級控件,跨平臺性不是很好.
javax.Swing: 在AWT的基礎上,建立的一套圖形化幾面系統.其中提供了更多的組件,而且完全有Java實現,增強了可一致性,屬輕量級控件
順便說一下,eclipse的界面用的包是java.xawt
簡單說一下體系
Component(構件,組件)
?|--Container(容器,特殊的子類)這個組件作為一個組件,里面可以繼續添加組件
??|--Window(窗口)
???|--Frame(框架,窗體)
???|--Dialog(對話框)
????|--FileDialog(文件對話框)
??|--Panel(面板)
?//下面與Container同級,但是不能添加組件
?|--Button(按鈕)
?|--Label(標簽,作用在于封裝文字)
?|--Checkbox(復選框)
?|--TextComponent(文本組件)
??|--TextArea(文本框)
??|--TextFileld(文本域)
GUI-布局管理器
容器中的組件的排放方式,就是布局
常見的布局管理器:
FlowLayout(流式布局管理器)
?總左到右的順序排列;
?Panel默認的布局管理器
BorderLayout(邊界布局管理器)
?東南西北中
?Frame默認的布局管理器
GridLayout(網格布局管理器)
?規則的矩陣
GardLayout(卡片布局管理器)
?選項卡
GridBagLayout(網格布局管理器)
?非規則的矩陣
GUI-Frame
//創建圖形化界面:
1,創建frame窗體;
2,對窗體進行基本設置,
?比如:大小,位置,布局;
3,定義組件;
4,將組件通過窗體的add方法添加到窗體中.
5,讓窗體顯示,通過setVisible(true)
//創建圖形化界面
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
class AwtDemo {
?public static void main(String[] args)
?{
??Frame f = new Frame("my awt");
??
??//設置窗體大小
??f.setSize(500,400);
??
??//設備位置位置,距左面300,上面200xp
??f.setLocation(300,20);
??
??//設置布局管理(流式布局管理)
??f.setLayout(new FlowLayout());
??
??//按鈕
??Button b = new Button("我是一個按鈕");
??
??//將按鈕添加到窗體當中
??f.add(b);
??
??//顯示窗體
??f.setVisible(true);
??
??
?}
}
GUI-事件監聽機制
事件監聽機制的特點:
1,事件源
2,事件
3,監聽器
4,事件處理方式
事件源:就是awt包或者swing包中的那些圖形界面組件
事件:每一個事件源都有自己特有的對應事件和共性事件.
監聽器:可以出發某一個事件的動作(不止一個動作)都已經封裝到了監聽器中
以上三者在java中都已經定義好了,直接獲取其對象來用就可以了.
我們需要做的事情是:就是對產生的動作進行處理.
GUI-窗體事件
package demo;
//創建圖形化界面
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);
??
??//設備位置位置,距左面300,上面200xp
??f.setLocation(300,20);
??
??//設置布局管理(流式布局管理)
??f.setLayout(new FlowLayout());
??
??//按鈕
??Button b = new Button("我是一個按鈕");
??
??//將按鈕添加到窗體當中
??f.add(b);
??
??//f.addWindowListener(new MyWin());
??//可以寫個匿名內部類
??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("我被打開了");
?????}
????});
??
??
??//顯示窗體
??f.setVisible(true);
?}
}
//應為WindowListener的子類windowASdapter已經實現了WindowListener接口.
//并覆蓋了其中的所有方法.那么我只需要繼承自WindowAdapter覆蓋我需要的方法即可
class MyWin extends WindowAdapter
{
?public void windowClosing(WindowEvent e)
?{
??System.out.println("window closing");
??System.exit(0);
?}
}
/*
class MyWin implements WindowListener
{
?//覆蓋了7個方法,可是我只用到了關閉的動作.
?//其它的動作都沒有用到,可是必須復寫
}
*/
GUI-Action事件
//按鈕中添加事件
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進行基本設置
??//setBounds(int x,int y,int width,int height)
??f.setBounds(300,100,500,400);
??f.setLayout(new FlowLayout());
??
??but = new Button("my button");
??
??//將組件添加到窗體中
??f.add(but);
??
??//加載一下窗體上的事件
??myEvent();
??//顯示窗體
??f.setVisible(true);
?}
?//將事件添加到這里
?public void myEvent()
?{
??f.addWindowListener(new WindowAdapter(){
???public void windowClosing(WindowEvent e)
???{
????System.exit(0);
???}
??});
??//讓按鈕具備退出程序的功能
??/*
?? * 按鈕就是事件源
?? * 那么選擇哪一個監聽器呢?
?? * 通過關閉窗體示例了解到想要知道哪個組件具備什么樣的特有監聽器.
?? * 需要查看該組件對象的功能
?? * 通過查詢Button的描述,發現按鈕支持一個特有監聽addActionListener,活動監聽
?? */
??but.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????System.out.println("按鈕干的");
????System.exit(0);
???}
??});
?}
?
?
?
?public static void main(String[] args)
?{
??new FrameDemo();
?}
}
GUI-鼠標事件
//鼠標事件
import java.awt.*;
import java.awt.event.*;
class MouseEventDemo {
?private Frame f;
?private Button but;
?MouseEventDemo()
?{
??init();
?}
?
?//對圖形界面初始化
?public void init()
?{
??f = new Frame("my frame");
??
??f.setBounds(300,100,500,400);
??f.setLayout(new FlowLayout());
??
??but = new Button("my button");
??
??f.add(but);
??
??myEvent();
??f.setVisible(true);
?}
?
?public void myEvent()
?{
??//窗口關閉
??f.addWindowListener(new WindowAdapter()
??{
???public void windowClosing(WindowEvent e)
???{
????System.exit(0);
???}
??});
??//按鈕的活動事件,如果想要這個按鈕鍵盤鼠標都能操作,建議用活動事件
??but.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????System.out.println("活動事件");
???}
??});
??//鼠標事件
??but.addMouseListener(new MouseAdapter()
??{
???int count = 1;
???int clickcount = 1;
???//鼠標進入事件
???public void mouseEntered(MouseEvent e)
???{
????System.out.println("鼠標進入該按鈕"+count++);
???}
???public void mouseClicked(MouseEvent e)
???{
????//getClickCount()獲取鼠標連擊次數
????if(e.getClickCount()==2)
????System.out.println("鼠標雙擊事件"+clickcount++);
???}
??});
???
?}
?public static void main(String[] args)
?{
??new MouseEventDemo();
?}
}
GUI-鍵盤事件
package demo8;
//鍵盤事件
import java.awt.*;
import java.awt.event.*;
class KeyDemo{
?private Frame f;
?private Button but;
?private TextField tf;
?KeyDemo()
?{
??init();
?}
?public void init()
?{
??f = new Frame("my frame");
??but = new Button("my button");
??
??tf = new TextField(20);//創建文本框
??
??f.setBounds(300,100,300,500);
??f.setLayout(new FlowLayout());
??f.add(tf);
??f.add(but);
??
??myEvent();
??f.setVisible(true);
?}
?public 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))
????{?
?????e.consume();//不會按照原事件執行
?????System.out.println(code+"您輸入的是非法的");
?????
????}
???}
??});
??
??//給but添加一個監聽
??but.addKeyListener(new KeyAdapter()
??{
???public void keyPressed(KeyEvent e)
???{
????//組合按鍵,ctrl+enter
????if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
?????System.exit(0);
????//如果按鍵是esc就退出
????//if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
????//?System.exit(0);
????
????
????//KeyEvent.getKeyText(e.getKeyCode())打印輸入內容
????//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
???}
??});
??
??
??
?}
}
class KeyEventDemo {
?public static void main(String[] args)
?{
??new KeyDemo();
?}
}
GUI-對話框Dialog
package demo10;
//GUI-練習, 列出指定目錄內容
import java.awt.*;
import java.awt.event.*;
import java.io.File;
class MyWindow
{
?private Frame f;
?private Button but;
?private TextField tf;
?private TextArea ta;
?
?private Dialog d;//誤操作提示框
?private Label lab;//
?private Button okBut;
?MyWindow()
?{
??init();
?}
?//畫界面
?public void init()
?{
??//創建f窗體,but按鈕,tf文本框,ta文本域
??f = new Frame();
??f.setBounds(300,100,600,500);//窗體坐標以及窗體大小
??f.setLayout(new FlowLayout());//布局方式
??
??//創建錯誤滴那個東東的窗體
??d = new Dialog(f,"提示信息-self",true);//true,不關閉此窗口,后面的窗口操作不了,false后面的窗口可以繼續操作
??d.setBounds(400,200,240,150);
??d.setLayout(new FlowLayout());
??lab = new Label();//封裝錯誤信息滴
??okBut = new Button("確定");
??
??d.add(lab);
??d.add(okBut);
??
??but = new Button("轉到");
??tf = new TextField(60);
??ta = new TextArea(25,70);//行,列
??
??f.add(tf);
??f.add(but);
??f.add(ta);
??
??myEvent();
??f.setVisible(true);
??
?}
?public void myEvent()
?{?
??//按鈕退出
??but.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????showDir();
???}
??});
??//彈出對話框的按鈕事件
??okBut.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????d.setVisible(false);
???}
??});
??
??tf.addKeyListener(new KeyAdapter()
??{
???public void keyPressed(KeyEvent e)
???{
????if(e.getKeyCode()==KeyEvent.VK_ENTER)
?????showDir();
???}
??});
??
??
??
??//彈出對話框的窗體事件
??d.addWindowListener(new WindowAdapter()
??{
???public void windowClosing(WindowEvent e)
???{
????d.setVisible(false);
???}
??});
??
??//f的窗口事件
??f.addWindowListener(new WindowAdapter()
??{
???public void windowClosing(WindowEvent e)
???{
????System.exit(0);
???}
??});
?}
?public void showDir()
?{
??String dirPath = tf.getText();
??File dir = new File(dirPath);//封裝成對象
??if(dir.exists() && dir.isDirectory())//dir存在,并且是目錄
??{
???ta.setText("");//清空上一次查詢
???String[] names = dir.list();
???for(String name : names)
???{
????ta.append(name+"\r\n");
???}
??}
??else
??{
???//錯誤提示信息
???String info = "您輸入的信息是:"+dirPath+"錯誤滴,請重新輸入";
???lab.setText(info);
???d.setVisible(true);
??}
?}
}
class MyWindowDemo {
?public static void main(String[] args)
?{
??new MyWindow();
?}
}
GUI-菜單
Menu();//菜單,菜單既可以添加菜單,也可以添加菜單條
MenuItem();//菜單條
mb.add(m);//添加"文件"
m.add(subMenu);//文件下面添加子慘淡
subMenu.add(subItem);//子條目
m.add(closeItem);
文件Menu
|--子菜單Menu
? |--子條目MenuItem
|--退出MenuItem
//菜單
import java.awt.*;
import java.awt.event.*;
class MyMenuDemo {
?private Frame f;
?private MenuBar mb;//菜單欄
?private Menu m,subMenu;//菜單
?private MenuItem closeItem,subItem;//子菜單
?
?MyMenuDemo()
?{
??init();
?}
?public void init()
?{
??f = new Frame();
??f.setBounds(100,100,500,600);
??f.setLayout(new FlowLayout());
??
??mb = new MenuBar();
??m = new Menu("文件");
??closeItem = new MenuItem("退出");
??subItem = new MenuItem("子條目");
??subMenu = new Menu("子菜單");
??f.setMenuBar(mb);//添加菜單
??mb.add(m);//添加"文件"
??m.add(subMenu);//文件下面添加子菜單
??subMenu.add(subItem);//子條目
??m.add(closeItem);
??
??myEvent();
??f.setVisible(true);
?}
?public void myEvent()
?{
??//f的窗口事件
??f.addWindowListener(new WindowAdapter()
??{
???public void windowClosing(WindowEvent e)
???{
????System.exit(0);
???}
??});
??closeItem.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????System.exit(0);
???}
??});
?}
?public static void main(String[] args)
?{
??new MyMenuDemo();
?}
}
GUI-練習-打開文件
package test11;
//練習-打開文件
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyMenuTest {
?private Frame f;
?private MenuBar bar;//菜單欄
?private Menu fileMenu;//菜單
?private MenuItem openItem,saveItem,closeItem;//子菜單
?private FileDialog openDia,saveDia;//打開,保存
?private TextArea ta;//文本區域
?
?MyMenuTest()
?{
??init();
?}
?public void init()
?{
??f = new Frame();
??f.setBounds(100,100,500,600);
??//f.setLayout(new FlowLayout());
??
??bar = new MenuBar();
??fileMenu = new Menu("文件");
??closeItem = new MenuItem("退出");
??openItem = new MenuItem("打開");
??saveItem? = new MenuItem("保存");
??ta = new TextArea();
??
??f.setMenuBar(bar);//添加菜單
??bar.add(fileMenu);//添加"文件"
??fileMenu.add(openItem);
??fileMenu.add(saveItem);
??fileMenu.add(closeItem);
??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();//名字
????//System.out.println(dirPath+fileName);
????if(dirPath==null || fileName==null)//如果有一個為空的話,那么就返回
?????return ;
????ta.setText("");//添加下個文件之前先清空文本區域
????File 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 es)
????{
?????throw new RuntimeException("讀取失敗");
????}
???}
??});
??//保存的事件
??saveItem.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????saveDia.setVisible(true);
???}
??});
??
??
??//f的窗口事件
??f.addWindowListener(new WindowAdapter()
??{
???public void windowClosing(WindowEvent e)
???{
????System.exit(0);
???}
??});
??closeItem.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????System.exit(0);
???}
??});
?}
?public static void main(String[] args)
?{
??new MyMenuTest();
?}
}
GUI-保存文件
package test11;
//練習-打開文件
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyMenuTest {
?private Frame f;
?private MenuBar bar;//菜單欄
?private Menu fileMenu;//菜單
?private MenuItem openItem,saveItem,closeItem;//子菜單
?private FileDialog openDia,saveDia;//打開,保存
?private TextArea ta;//文本區域
?private File file;
?
?MyMenuTest()
?{
??init();
?}
?public void init()
?{
??f = new Frame();
??f.setBounds(100,100,500,600);
??//f.setLayout(new FlowLayout());
??
??bar = new MenuBar();
??fileMenu = new Menu("文件");
??closeItem = new MenuItem("退出");
??openItem = new MenuItem("打開");
??saveItem? = new MenuItem("保存");
??ta = new TextArea();
??
??f.setMenuBar(bar);//添加菜單
??bar.add(fileMenu);//添加"文件"
??fileMenu.add(openItem);
??fileMenu.add(saveItem);
??fileMenu.add(closeItem);
??f.add(ta);//文本區域
??
??
??openDia = new FileDialog(f,"我要打開",FileDialog.LOAD);
??saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);
??
??myEvent();
??f.setVisible(true);
?}
?public 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.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();//名字
????System.out.println(dirPath+fileName);
????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 es)
????{
?????throw new RuntimeException("讀取失敗");
????}
???}
??});
???
??//f的窗口事件
??f.addWindowListener(new WindowAdapter()
??{
???public void windowClosing(WindowEvent e)
???{
????System.exit(0);
???}
??});
??closeItem.addActionListener(new ActionListener()
??{
???public void actionPerformed(ActionEvent e)
???{
????System.exit(0);
???}
??});
?}
?public static void main(String[] args)
?{
??new MyMenuTest();//實例一個菜單窗體
?}
}
GUI-jar包雙擊執行
jar -cvf my.jar mymenu
1,創建一個文檔,內容如下
Main-Class: 包名.類名"回車"
例如:
Main-Class: mymenu.MyMenuTest
2,執行命令如下:
jar -cvfm 自定義.jar 配置文件名 包名
jar -cvfm my.jar 1.txt mymenu
3,必須要注冊到本地才能用,javaw
?
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ----------
轉載于:https://www.cnblogs.com/yun45/archive/2013/05/14/3077699.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的黑马程序员_Java基础GUI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 遇到和自己同一天生日的人概率有多大?万没
- 下一篇: 近6000块的旗舰翻车!索尼Xperia