一、GUI(图形用户界面)
1、GUI:GraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。
2、计算机与用户交互的两种方式:GUI和CLI
GUI: Graphical User Interface,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。
CLI: Command LineUser Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观
3、java也将这种界面封装为对象,其中的对象都放在了两个包中:java.Awt包和javax.Swing包。
java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要调用本地系统方法实现功能,属重量级控件。
javax.Swing包:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,且完全由java实现,增强了移植性,属轻
量级控件
二、布局管理器
1、布局:容器中的组件排列方式
2、常见的布局管理器:
1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗 体。
3)GridLayout:网格式布局管理器,规则的矩阵
4)CardLayout:卡片式布局管理器,即选项卡
5)GridBayLayout:网格包布局管理器,非规则矩阵
五, 创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true)
事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理。
事件源:就是awt包或者swing包中的那么图形界面组件。
事件:每一个事件源都有自己特有的对象事件和共性事件、
监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了
代码体现:
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);//设置窗体的打小
f.setLocation(300,200);//设置窗体的位置
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);//让窗体显示
7,让按钮具备退出程序的功能:
按钮就是事件源。
那么选择那么监听器呢?
通过关闭窗体示例了解到,想要知道那个组件具备什么样的特有监听器。
需要查看该组件对象的功能。
通过查阅button的描述。发现按钮支持一个特有监听addActionListener
监听:
1,//给But添加一个键盘监听。
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);//Ctri键加上Enter键结束窗口
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
}
});*/
2,
//鼠标监听:
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)
}
});
六,对话框
何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创建的 这个对象。
示例:
//练习:代码实现图中的窗口格式列出目录下的文件,如果输入的信息有误提示对话框
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class DiaoYong
{
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;
//如果输入有误弹出对话框:
private Dialog d;
private Button okbut;
private Label lab;
DiaoYong()
{
init();
}
public void init()
{
f=new Frame("my fame");
f.setBounds(300,100,500,400);//300与左边的距离。100与上边的距离。
//500是窗体的长度。400是窗体的宽度
f.setLayout(new FlowLayout());
tf=new TextField(60);
but=new Button("转到");
ta=new TextArea(20,50);//20是表示横标。50是表示纵标
f.add(tf);
f.add(but);
f.add(ta);
d=new Dialog(f,"提示信息-self",true);//创建对话框
d.setBounds(400,200,250,150);
d.setLayout(new FlowLayout());
lab=new Label();
okbut=new Button("确定");
d.add(lab);
d.add(okbut);
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)
{
showDir();
}
});
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);//让窗口不显示
}
});
okbut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);//让窗口不显示
}
});
}
public void showDir()
{
String dirPath=tf.getText();
File dir=new File(dirPath);
if(dir.exists() && dir.isDirectory())
{
ta.setText("");
String [] st=dir.list();//列出路径名表示的目录中的文件和目录
for(String name:st)
{
ta.append(name+"\t\n");
}
}
//ta.setText(txt);
//tf.setText("");
//System.out.println(txt);
else
{
String s="您输入有误:"+dirPath+"请重新输入";
lab.setText(s);//错误信息加入到对话框中
d.setVisible(true);
}
}
}
class LXDemo
{
public static void main(String[] args)
{
new DiaoYong();
}
}
七,菜单:Menu
示例:
//菜单:
import java.awt.*;
import java.awt.event.*;
class Mymenu
{
private Frame f;//创建窗体
private MenuBar mb;//将菜单栏与 Frame 对象关联
private Menu m,subMenu;//创建菜单栏
private MenuItem closeItem,subItem;//创建菜单项
Mymenu()
{
init();
}
public void init()
{
f=new Frame("my fame");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());
mb=new MenuBar();
m=new Menu("文件");
subMenu=new Menu("子菜单");//在"文件"栏目下再添加菜单栏:"子菜单"
closeItem=new MenuItem("退出");
subItem=new MenuItem("子条目");//在"文件"栏目下再添加菜单项:"子条目"
subMenu.add(subItem);//在"子菜单"下再添加"子条目"
m.add(subMenu);
m.add(closeItem);
mb.add(m);
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
public 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);
}
});
}
}
class MymenuDemo
{
public static void main(String[] args)
{
new Mymenu();
}
}