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

黑马程序员--java--图形用户界面GUI

2015-03-26 22:40 253 查看
——- android培训java培训、期待与您交流! ———-

我热爱我的热爱,并将继续坚持我的热爱,爱是我存在的理由,我会是那匹黑马。

一、GUI(图形用户界面)

GUI –Graphical User Interface(图形用户接口)。

• 用图形的方式,来显示计算机操作的界面,这样更方便更直观。

CLI – Command line User Interface (命令行用户接口)

• 就是常见的Dos命令行操作。

• 需要记忆一些常用的命令,操作不直观。

举例:

• 比如:创建文件夹,或者删除文件夹等,Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

二、继承关系图

Container:为容器,是一个特殊的组件,该组件中可以通过add 方法添加其他组件进来。

Container常用子类:Window Panel(面板,不能单独存在。)

Window常用子类:Frame Dialog

三、常见布局管理

1)、布局:容器中的组件排列方式

2)、常见的布局管理器:

1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器

2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。

3)GridLayout:网格式布局管理器,规则的矩阵

4)CardLayout:卡片式布局管理器,即选项卡

5)GridBayLayout:网格包布局管理器,非规则矩阵

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

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

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

四、简单的创建窗体过程

Container常用子类:Window Panel(面板,不能单独存在。)

Window常用子类:Frame Dialog

简单的窗体创建过程:

• Frame f = new Frame(“my window”);

• f.setLayout(new FlowLayout());

• f.setSize(500,400);//设置窗体大小

• f.setLocation(300,200);//设置窗体出现在屏幕的位置

• f.setVisible(true);

五、事件监听机制组成

事件源(组件)

事件(Event)

监听器(Listener)

事件处理(引发事件后处理方式)

事件监听机制流程图

这里写图片描述

事件监听机制:

确定事件源(容器或组件)

通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

一般用匿名内部类来表示。

在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

事件触发后会把事件打包成对象传递给该变量。(其中包括

事件源对象。通过getSource()或者,getComponent()获 取。)

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

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

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

以上三者,在java中都已经定义好了。

直接获取其对象来用就可以了。

我们要做的事情是,就是对产生的动作进行处理。

/*建立一上类似QQ登入的界面*/

package nuddles.j2seDemo;

import java.awt.*;
import java.awt.event.*;

class FrameDemo{
// 创建工具类
private Frame frame;
private Button button;
private TextField tf;
FrameDemo(){
init();
}
public void init(){
// 初始化方法
frame = new Frame("my frame");
button = new Button("my button");
tf = new TextField(20);
frame.setBounds(300,100,600,500);
frame.setLayout(new FlowLayout());
frame.add(tf);
frame.add(button);
myEvent();
// 调用事件监听方法
frame.setVisible(true);

}
private void myEvent(){
// 窗口关闭事件
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
button.addActionListener(new ActionListener(){
//按钮事件
int count = 0;
public void actionPerformed(ActionEvent e){
count++;
System.out.println("button clicked"+count);
if (count>=5) {
System.exit(0);
}
}
});
tf.addKeyListener(new KeyAdapter(){
// 键盘事件
public void keyPressed(KeyEvent ke){
int code = ke.getKeyCode();
System.out.println("haha");
if (code<KeyEvent.VK_0||code>KeyEvent.VK_9) {
ke.consume();
System.out.println("these are not numbers");
}
}
});
button.addMouseListener(new MouseAdapter(){
// 鼠标事件
public void mouseClicked(MouseEvent e){
if (e.getClickCount()==2) {
System.exit(0);
}
}
});
button.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
int code = e.getKeyCode();
if (e.isControlDown()&&code==KeyEvent.VK_ENTER) {
System.exit(0);
}
}
});

}

public static void main(String[] args) {
new FrameDemo();
}
}


六、菜单:Menu

1、菜单继承关系

这里写图片描述

2、说明

1)Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem

2)MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。

3)MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。

4)菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件处理。

5)通过setMenuBar()方法,将菜单添加到Frame中。

/*
练习:
创建菜单项,打开,保存,退出 打开文件显示文本区域中。
*/
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: