您的位置:首页 > 产品设计 > UI/UE

——JAVASE-GUI图形用户界面

2015-07-21 00:13 495 查看
一、GUI

1、Java为GUI提供的对象都存在java.awt和javax.swing两个包中



GUI各组件关系图


Container是一个容器,是一个特殊的组件,通过add()添加其他组件。

2、容器中组件排放方式,就是布局

(1)、FlowLayout流式布局管理器,Panel默认的布局管理器

(2)、BorderLayout 边界布局管理器,Frame默认的布局管理器

(3)、GridLayout 网格布局管理器,是规则的矩阵

(4)、CardLayout 卡片布局管理器 ,选项卡

(5)、GridBagLayout 网格包布局管理器,非规则的矩阵

例:

创建图形化界面:

1,创建frame窗体。

2,对窗体进行基本设置。比如大小,位置,布局。

3,定义组件。

4,将组件通过窗体的add方法添加到窗体中。

5,让窗体显示,通过setVisible(true)

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.setVisible(true);
}
}


二、事件监听机制

1、事件监听机制的组成

事件源、事件、监听器、事件处理

事件源:就是awt包或者swing包中的那些图形界面组件。

事件:每一个事件源都有自己特有的对应事件和共性事件。

监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。

以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。我们要做的事情是,就是对产生的动作进行处理。

2、事件处理

用户的一个操作就是一个事件, 事件处理就是在事件发生的时候程序做出什么反应

事件发生在哪个组件上, 哪个组件就是事件源

给事件源添加一个监听器对象

监听器对象中包含若干事件处理方法

如果事件发生了, 事件处理方法就会自动执行

.适配器

3、适配器

(1)、在使用监听器的时候, 需要定义一个类事件监听器接口.

通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.

适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.

(2)、适配器原理

适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的.

目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了。

4、KeyEvent类中常用方法

public char getKeyChar() 返回此事件中的键关联的字符

public int getKeyCode()返回与此事件中的键关联的整数 keyCode

public static String getKeyText(int keyCode)返回keyCode 的 对应的字符

//键盘鼠标事件
import java.awt.*;
import java.awt.event.*;
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添加一个窗口监听
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

//给tf添加一个鼠标监听
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)
{
//同时按下Ctrl键和Enter键  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添加一个活动监听
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("action ok");
}
});
*/

/*//给But添加一个鼠标监听

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++);
}
});
*/
/*//按下ESC键时退出程序
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==27)
System.exit(0);
}
});
*/
}
public static void main(String[] args)
{
new MouseAndKeyEvent();
}
}


注意:public void mouseClicked(MouseEvent e)仅鼠标单机时触发

public void actionPerformed(ActionEvent e)鼠标单机时触发,按空格键也会触发

三、菜单



菜单各组件关系图


注意: Frame中添加MenuBar使用SetMenuBar()

菜单示例:
package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest
{   private Frame f;//窗体
private MenuBar bar;//菜单条
private TextArea ta;//输入文本区域
private Menu fileMenu;//文件菜单
private MenuItem openItem,saveItem,closeItem;//打开、保存、关闭菜单项
private FileDialog openDia,saveDia;//打开、保存文件对话框
private File file;//文件
MyMenuTest()
{
init();
}
public void init()
{//定义组件
f = new Frame("my window");
f.setBounds(300,100,650,600);
bar = new MenuBar();
ta = new TextArea();
fileMenu = new Menu("文件");
openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出");
//往菜单中添加菜单项
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
//把菜单添加到菜单条上
bar.add(fileMenu);
f.setMenuBar(bar);//把菜单条添加到窗体上
//定义打开、保存对话框
openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);
f.add(ta);//把输入文本区域添加到窗体中
myEvent();
f.setVisible(true);//显示窗体
}
private 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.flush();
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 ex)
{
throw new RuntimeException("读取失败");
}

}
});
//给关闭选项添加活动监听
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 MyMenuTest();
}
}
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: