------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,设置面板的布局管理器。
四、创建窗体
1、Frame创建代码:
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执行。