黑马程序员——Java基础----GUI


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

首先感谢黑马、感谢素不相识的 毕老师!!

 

第一讲     GUI(用户图形界面)

一、GUI概述

a、用户与计算机交流的界面方式GUI。

b、交互的基本的方式有:GUI(界面)以及CLI(命令行)两种方式。

      

3、java.Awt、javax.Swing是界面对象的封装的包。抽象窗口工具包:java.Awt(是属于重量级控件,需要调用本地系统方法。)

     图形界面系统: javax.Swing包(以AWT为基础,全部由java实现是轻量级控件)

 

二、GUI继承关系图

 

 

 

三、GUI布局管理器

a、布局:组件被排列的方式

b、一般的的布局管理器:

        b1)FlowLayout:Panel默认的布局管理器,左向右排列。

        b2)BorderLayout:Frame的默认布局管理器边界式布局管理器,东南西北中的组织方式,        

     b3)GridLayout:矩阵网格式

        b4)CardLayout:选项卡式布局管理器

        b5)GridBayLayout:不是规则矩阵布局管理器,

c、如果存在多种布局方式,如何创建窗体界面呢?步骤:

        c1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel

        c2)将组件加入Panel,设置面板的布局管理器。

 

四、创建窗体

1Frame创建代码:

        Frame f = new Frame("beatful Frame");

2、窗体进行基本布局:

        f.setSize(int wight,int hight);//大小

        f.setLocation(int a,int b);//设置坐标

        f.setBounds(int a,int b,int wight,int hight),大小和位置布局

        f.setLayout(Layout layout),参数确定t

3、组件创建:

       Button b1 = new Button(“beatiful Button”);

4、add方法窗体添加组件:

        f.add(b1);

5、显示窗体:

        f.setVisible(boolean b1);

示例:

class  FrameDemo

{

 

//定义该图形中所需的组件的引用。

private Frame f;

private Button but;

 

FrameDemo()

{

init();

}

 

public void init()

{

f = new Frame("my frame");

 

//frame进行基本设置。

f.setBounds(300,100,600,500);

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

 

*/

but.addActionListener(new ActionListener()

{

private int count = 1;

public void actionPerformed(ActionEvent e)

{

//System.out.println("退出,按钮干的");

//System.exit(0);

//f.add(new Button("Button-"+(count++)));

//f.setVisible(true);

//f.validate();

 

//System.out.println(e.getSource());

Button b = (Button)e.getSource();

Frame f1 = (Frame)b.getParent();

 

f1.add(new Button("button-"+count++));

f1.validate();

 

 

}

});

}

 

 

 

public static void main(String[] args) 

{

new FrameDemo();

}

}

五、监听事件

1、构成:

        1)事件源:awt以及swing包中的组件

        2)Event:特定的事件

        3)Listener:动作,可以使得一个事件发生。

        4)事件发生:事件的后续处理的动作

 

2、使用说明

        

Step:

        a)明确容器或是组件。Listener注册到该事件源上。调用的函数接收的是某Listener的子类还有Adapter的子类。

        b)重写方法。

 

示例代码(毕老师教学)

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,600,500);

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("ctrl+enter is run");

 

//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 clickCount = 1;

public void mouseEntered(MouseEvent e) 

{

System.out.println("鼠标进入到该组件"+count++);

}

public void mouseClicked(MouseEvent e)

{

if(e.getClickCount()==2)

System.out.println("双击动作"+clickCount++);

}

});

*/

}

 

 

 

 

 

 

public static void main(String[] args) 

{

new MouseAndKeyEvent();

}

}

 

/*共性事件:键盘事件和鼠标事件 需求:在窗体中列出指定目录内容*/import java.awt.*;import java.awt.event.*;import java.io.*; class KeyAndMouseEvent { //全局变量的界面组件引用 private Frame f; private Button but; private TextField tf; private TextArea ta;  //构造函数 KeyAndMouseEvent() { init(); }  //窗体创建与功能实现 public void init() { //组件实例化 f=new Frame("my fame"); but=new Button("跳转"); tf=new TextField(50); ta=new TextArea(30,58);  //窗体基本设置 f.setBounds(300,150,500,500); f.setLayout(new FlowLayout());  //添加组件 f.add(tf); f.add(but); f.add(ta);  //窗体事件 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=0; public void mouseClicked(MouseEvent e) { // if(e.getClickCount()==2) // System.out.println("鼠标双击按钮");  // System.out.println("鼠标单击按钮"); //System.exit(0);  showFile();//显示到文本区中 } /* public void mouseEntered(MouseEvent e) { System.out.println("鼠标放进入按钮范围"+(++count)+"次"); } */ });  /* //按钮键盘事件 but.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //捕获同时按下ctrl+entry if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) System.out.println("Ctrl+Enter.....is Down"); //System.out.println(e.getKeyText(e.getKeyCode())+"---"+e.getKeyCode()); } }); */  //文本框键盘事件 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { /* //判断输入字符是否是数字 if(e.getKeyCode()<KeyEvent.VK_0||e.getKeyCode()>KeyEvent.VK_9) { System.out.println("你输入的数字非法,请重数"); e.consume();//不显示输入的字符 } */  if(e.getKeyCode()==KeyEvent.VK_ENTER) showFile();//将目录下的内容显示到文本区中 } }); }  //将路径下的目录或文件列出 private void showFile() { String path=tf.getText();//获取文本框内容 File file=new File(path);//将路径封装成文件对象 //判断是否存在 if(file.exists()) { ta.setText("");//清空文本区中的内容 //如果是目录 if(file.isDirectory()) { String[] dir=file.list();//列出目录下的文件和目录 //遍历 for (String name : dir) { ta.append(name+"\r\n");//添加到文本区中 } } else ta.append(file.getName());//如果是文件,则只显示该文件的名字 } else System.out.println("您输入的路径不存在,请重输或者去医院"); }   public static void main(String[] args)  { //运行窗体 new KeyAndMouseEvent(); }}

 

第二讲     应用

一、Dialog

        何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创建的这个对象。

示例:

  二、Menu

a、Menu继承关系

       

b、必要说明

        b1)Menu:是对MenuItem;设置了右三角标。

        b2)MenuBar:菜单栏,菜单以及菜单条目的添加。

        b3)MenuItem:菜单条目,最后的菜单项。

        b4)菜单的事件,即类型为MenuItem以及Menu事件源添加活动监听以及事件处理。

        b5、setMenuBar()函数,菜单最终可以添加Frame里面。

 

示例代码(毕老师教学)

class MyMenuDemo 

{

 

private Frame f;

private MenuBar mb;

private Menu m,subMenu;

private MenuItem closeItem,subItem;

 

MyMenuDemo()

{

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 MyMenuDemo();

}

}

 

 

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("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 MyMenuDemo(); }}

 

三、jar包双击执行

        简单讲就是将class文件打包。

Step:

        s.1、第一步java文件中创建一个包。

        s.2、第二步生成包:代码javac -d e:\myclass Mypackage.java,e盘下的myclass目录下产生.class文件

        s.3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。

        s.4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令

        s.5、打包完毕双击执行。

注意:

        jar文件必须先注册再运行。

        

        以win7系统为例:

               a.选择设置默认打开方式为jdk\bin的javaw.exe。

               b.更改注册表:

              c.双击jar执行。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值