黑马程序员08-GUI自我提问

来源:互联网 发布:风云万象 厦门网游网络 编辑:程序博客网 时间:2024/06/06 20:27

---------------------- android培训、java培训、期待与您交流! ------------------------

1,什么是图形用户接口?

GUIGraphic User Interface的简写,中文名称是图形用户接口。

它指的是用图形显示用户界面,它的优点是简单方便。

2,什么是CLI

CLICommand line User Interface的简写,中文名称是命令行用户接口。

它就是Dos命令行操作方式。

使用命令行用户接口需要记住一些命令,不方便。

3GUI常用的类存储在哪儿?

GUI常用的类存储在java.Awt包和javax.Swing包中。

4,AwtSwing各有什么特点?

AwtAbstract Window Toolkit的简写,中文名称是抽象窗口工具包,java.Awt需要调用本地系统方法实现功能,属重量级控件。

javax.Swing是在Awt基础上建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属轻量级接口。

5,什么是事件监听机制?

事件监听机制由以下部分组成:

1,事件源(组件)。事件源就是awt包和swing包中的图形界面组件。

2,事件(Event)。每一个事件源都有自己特有的对应事件和共性事件。

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

以上三者在java中都已经定义好了,直接获取其对象来用就可以了。

我们要做的就是对产生的事件进行处理。

4,事件处理(引发事件后的处理方式)。

6,事件监听机制的流程是什么样的?

首先有事件源,它能产生事件。然后有监听器,监听器能监听特定事件,并对事件用特定方式进行处理。将监听器注册在事件源上来接收事件。当监听器所监听的事件作用在事件源上时,就产生事件,事件被包装成事件对象,传递给监听器。监听器就对事件进行处理。

/*

如何创建图形化界面?

1,建立Frame窗体。

2,设置窗体的基本参数

大小,位置,布局等

3,定义组件。

4,通过Frameadd方法将组件添加到窗体上。

5,调用setVisible(true)方法显示窗体。

建立一个框架

什么是框架?

显示出来的就是框架。

setVisible(boolean b)来显示框架。

*/

import java.awt.*;

import java.awt.event.*;//WindowEvent类属于java.awt.event包,在监听器中,需要传入WindowEvent对象作为参数,所以当程序中使用到监听器时,要导入java.awt.event包。

class AwtDemo 

{

public static void main(String[] args) 

{

Frame f=new Frame("my frame");//建立窗体对象,名称为my frame

f.setSize(500,600);//Frame类的setSize(int a,int b)方法可以设置框架的大小。

f.setVisible(true);//通过Frame对象f调用Frame类的函数setVisible(boolean b)来显示框架。

f.setLocation(300,200);//框架默认出现在左上角。Frame类的setLocation(int x,int y)方法可以设置框架的位置。

f.setLayout(new FlowLayout());//Frame对象f调用Frame类的函数setLayout()来设置布局类型。要传入参数.

Button b=new Button("添加了一个按钮,好开心");//建立一个Button类的对象,它可以通过add()方法被添加到框架上。

Button b1=new Button("又添加了一个按钮,好开心");

f.add(b);//add方法添加按钮到框架上。

f.add(b1);

System.out.println("Hello World!");

/*

使用Frame类的addWindowListener(WindowListener l)方法将监听器注册到窗体即Frame类的对象f上。

其中的WindoListener类型的参数l就是监听器。

WindowListener是个接口,它有七个抽象方法,它不能创建对象,那么就要传入它的子类对象作为监听器。

但是创建子类实现WindowListener接口需要覆盖它的七个抽象方法,比较麻烦。

发现有一个WindowListener接口的实现类WindowAdapter,该实现类中的方法为空。它存在的目的是方便创建侦听器对象。

        继承WindowAdapter可以创建 WindowEvent 侦听器并覆盖所需的方法。

*/

f.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

//System.out.println("关闭窗口"+"..."+e.toString());//窗体事件e中包含了事件的状态等信息。

System.out.println("用匿名内部类关掉窗口,我好厉害啊");

System.exit(0);//调用系统的exit()方法并传入参数0,以此退出java虚拟机,也就退出程序关闭窗口。

}

}

);

}//使用匿名内部类就是直接用new建立对象,然后把类的方法体写在new MyWindowLis()后面就可以了。

}

class MyWindowLis extends WindowAdapter

{

public void windowClosing(WindowEvent e)

{

//System.out.println("关闭窗口"+"..."+e.toString());//窗体事件e中包含了事件的状态等信息。

System.exit(0);//调用系统的exit()方法并传入参数0,以此退出java虚拟机,也就退出程序关闭窗口。

}

}

/*

把事件和图形化界面分离出来。也就是封装在不同的代码块里。

*/

import java.awt.*;

import java.awt.event.*;

class  FrameDemo

{

public static void main(String[] args) 

{

CreateFrame cf=new CreateFrame();

cf.frame();

}

}

class CreateFrame

{

private Frame f;

private Button but;

/*

CreateFrame(Frame f,Button but)

{

this.f=f;

this.but=but;

}

*/

public void frame()

{

//1,创建窗体

f=new Frame();

//2,对窗体进行基本设置。

f.setSize(600,500);

f.setLocation(300,200);

//3,将按钮添加到窗体上

f.add(but);

 myEvent();

//显示窗体

f.setVisible(true);

}

public void myEvent()

{

f.addWindowListener(new WindowAdapter()

{

public void myLis(WindowEvent e)

{

System.exit(0);

}

});

}

}

/*

鼠标和键盘事件。

*/

import java.awt.*;

import java.awt.event.*;

class  MouseAndKeyEvent

{

private Frame f;

private Button but;

private TextField tf;

MouseAndKeyEvent()

{

frame();

}

public void frame()

{

//1,创建窗体

f=new Frame();

        tf=new TextField(30);//TextFiled类的对象时可以编辑单行文本的文本组件。

//2,对窗体进行基本设置。

f.setSize(600,500);

f.setLocation(300,200);

        //3,设置布局

f.setLayout(new FlowLayout());

//3,将按钮添加到窗体上

but=new Button("要建立按钮啊,笨蛋!1+1等于几啊?");

f.add(tf);

f.add(but);

 myEvent();

//显示窗体

f.setVisible(true);

}

public void myEvent()

{

f.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

        //but.addActionListener(new myActionListener());

but.addMouseListener(new myMouseListener());

/*

but按钮添加一个键盘监听器。but调用component接口的addKeyListener(KeyListener l)方法将键盘监听器注册到but按钮上,并传入一个KeyListener接口的实现类的对象作为实际参数。

键盘事件e调用KeyEvent类的getKeyChar()方法,返回点击的键的字符,键盘事件e调用KeyEvent类的getCharCode()方法,返回按下的键在ASCII码表中对应的数字。

static String getKeyText(int KeyCode)方法是KeyEvent类的静态方法,可以用类名KeyEvent调用。它的返回值类型是String,作用是返回按下的键的String类型表示,可以用来返回spaceshift

getkeyChar()方法无法返回的键。它需要传入int类型的参数KeyCode,就是按下的键在ASCII码表中对应的值。getKeyCode()方法返回的是按下的键在ASCII码表中对应的值。

所以写成KeyEvent.getKeyText(e.getKeycode()).

*/

but.addKeyListener(new KeyAdapter()

{

public void keyPressed(KeyEvent e)

{

/*

KeyEvent类是InputEvent类的子类

*/

if (e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_SHIFT)//VK_ESCAPE是定义在KeyEvent类中的静态变量,我要用它,就要调用它。就像我要用KeyEvent类中的方法,也要用它的对象或者类名调用一样。

System.exit(0);

System.out.println(e.getKeyText(e.getKeyCode())+"..."+e.getKeyCode());

}

});

tf.addKeyListener(new KeyAdapter()

{

public void keyPressed(KeyEvent e)

{

/*

在键盘事件中,getKeyCode()方法返回的是与此事件中的键关联的整数 keyCode。在此方法中,为每个键都定义对应的静态int型变量。

比如整数0对应的keyCodeVK_0

要表达按下的键的值大于0

应使用e.getKeyCode()>VK_0,而不是e.getKeyCode>0

*/

if(e.getKeyCode()>=KeyEvent.VK_0&&e.getKeyCode()<=KeyEvent.VK_9)

{

  

}

else

{

/*

consume()方法是KeyEevent类的父类InputEvent的一个方法,调用这个方法可以使用此事件,就是使这个事件过去。以便不会按照默认源代码来处理此事件。

在这里,按下一个键,引发KeyEvent事件,默认会在文本框中显示按下的这个键,KeyEvent事件调用了consume()后,就把这个事件吸收了,事件就结束了,

就不会在文本框中显示按下的这个按键了。

如何在一个文本框中限定只能输入特定数据,比如数字,而不能输入其他数据?

1,用if语句中的条件表达式限定可以输入的数据,即想要发生的键盘事件。如果是不想要的数据按键,就用键盘事件调用consume()方法,将键盘事件吸收掉。该按键的数据就

不会显示在文本框中。

*/

e.consume();

}

}

});

}

public static void main(String[] args) 

{

new MouseAndKeyEvent();

}

}

class myMouseListener extends MouseAdapter

{

public void mouseClicked(MouseEvent e)

{

/*

因为点击的是什么键,点击了几次都发生在鼠标点击之后,所以这些信息都在鼠标事件中,即在MouseEvent类中。

MouseEvent类中有一个getClickCount()方法,MouseEvent类的对象通过调用此方法可以得到鼠标点击的次数。

*/

   if (e.getClickCount()==2)

   System.out.println("2");

}

}

class myActionListener implements ActionListener//ActionListener接口只有一个抽象方法actionPerformed(ActionEvent e)。要使用时,只需实现这个接口,覆盖actionPerformed(ActionEvent e)方法即可

{

public void actionPerformed(ActionEvent e)

{

    System.out.println("动作监听");

}

}

package mymenu;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class MyMenu

{

private Frame f;

private MenuBar mb;

private Menu m;

private MenuItem openItem,saveItem,mi;

private FileDialog openDia,saveDia;

private TextArea ta;

MyMenu()

{

init();

}

public void init()

{

f=new Frame("菜单演示");

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

mb=new MenuBar();

m=new Menu("文件");

mi=new MenuItem("退出");

openItem=new MenuItem("打开");

saveItem=new MenuItem("保存");

openDia=new FileDialog(f,"又学了打开,好开心",FileDialog.LOAD);

saveDia=new FileDialog(f,"这个不是打开了,是保存哦",FileDialog.SAVE);

        ta=new TextArea();

f.setMenuBar(mb);//调用Frame类的方法setMenuBar(MenuBar mb)将菜单栏添加到框架上。

mb.add(m);

f.add(ta);

m.add(openItem);

m.add(saveItem);

m.add(mi);

myEvent();

f.setVisible(true);

}

public void myEvent()

{

saveItem.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

saveDia.setVisible(true);

String dirPath=saveDia.getDirectory();

String fileName=saveDia.getFile();

}

}

);

openItem.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

openDia.setVisible(true);

String dirPath=openDia.getDirectory();//FileDialog类的对象openDia调用它的成员方法String getDirectory(),返回的是我点击的文件的路径。

String fileName=openDia.getFile();//FileDialog类的对象fileName调用它的成员方法String getFile(),返回的是我点击的文件的名称。

if(dirPath==null|fileName==null)

 return ;

File 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");

}

}

catch (IOException ie)

{

throw new RuntimeException("错误");

}

}

});

mi.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 MyMenu();

}

}

import java.awt.*;

import java.awt.event.*;

import java.io.*;

class MyMenuTest

{

private Frame f;

private MenuBar mb;

private Menu m;

private MenuItem openItem,saveItem,mi;

private FileDialog openDia,saveDia;

private TextArea ta;

MyMenuTest()

{

init();

}

public void init()

{

f=new Frame("菜单演示");

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

mb=new MenuBar();

m=new Menu("文件");

mi=new MenuItem("退出");

openItem=new MenuItem("打开");

saveItem=new MenuItem("保存");

openDia=new FileDialog(f,"又学了打开,好开心",FileDialog.LOAD);

saveDia=new FileDialog(f,"这个不是打开了,是保存哦",FileDialog.SAVE);

        ta=new TextArea();

f.setMenuBar(mb);//调用Frame类的方法setMenuBar(MenuBar mb)将菜单栏添加到框架上。

mb.add(m);

f.add(ta);

m.add(openItem);

m.add(saveItem);

m.add(mi);

myEvent();

f.setVisible(true);

}

public void myEvent()

{

saveItem.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

saveDia.setVisible(true);

String dirPath=saveDia.getDirectory();

String fileName=saveDia.getFile();

}

}

);

openItem.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

openDia.setVisible(true);

String dirPath=openDia.getDirectory();//FileDialog类的对象openDia调用它的成员方法String getDirectory(),返回的是我点击的文件的路径。

String fileName=openDia.getFile();//FileDialog类的对象fileName调用它的成员方法String getFile(),返回的是我点击的文件的名称。

if(dirPath==null|fileName==null)

 return ;

File 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");

}

}

catch (IOException ie)

{

throw new RuntimeException("错误");

}

}

});

mi.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();

}

}


---------------------- android培训、java培训、期待与您交流! ------------------------