黑马程序员08-GUI自我提问
2012-08-25 18:17
337 查看
---------------------- android培训、java培训、期待与您交流! ------------------------
1,什么是图形用户接口?
GUI是Graphic User Interface的简写,中文名称是图形用户接口。
它指的是用图形显示用户界面,它的优点是简单方便。
2,什么是CLI?
CLI是Command line User Interface的简写,中文名称是命令行用户接口。
它就是Dos命令行操作方式。
使用命令行用户接口需要记住一些命令,不方便。
3,GUI常用的类存储在哪儿?
GUI常用的类存储在java.Awt包和javax.Swing包中。
4,Awt和Swing各有什么特点?
Awt是Abstract Window Toolkit的简写,中文名称是抽象窗口工具包,java.Awt需要调用本地系统方法实现功能,属重量级控件。
javax.Swing是在Awt基础上建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属轻量级接口。
5,什么是事件监听机制?
事件监听机制由以下部分组成:
1,事件源(组件)。事件源就是awt包和swing包中的图形界面组件。
2,事件(Event)。每一个事件源都有自己特有的对应事件和共性事件。
3,监听器(Listener)。将可以触发某一个事件的动作(不只一个)都已经封装到了监听器中。
以上三者在java中都已经定义好了,直接获取其对象来用就可以了。
我们要做的就是对产生的事件进行处理。
4,事件处理(引发事件后的处理方式)。
6,事件监听机制的流程是什么样的?
首先有事件源,它能产生事件。然后有监听器,监听器能监听特定事件,并对事件用特定方式进行处理。将监听器注册在事件源上来接收事件。当监听器所监听的事件作用在事件源上时,就产生事件,事件被包装成事件对象,传递给监听器。监听器就对事件进行处理。
/*
如何创建图形化界面?
1,建立Frame窗体。
2,设置窗体的基本参数
大小,位置,布局等
3,定义组件。
4,通过Frame的add方法将组件添加到窗体上。
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类型表示,可以用来返回space,shift
等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对应的keyCode是VK_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培训、期待与您交流! ------------------------
1,什么是图形用户接口?
GUI是Graphic User Interface的简写,中文名称是图形用户接口。
它指的是用图形显示用户界面,它的优点是简单方便。
2,什么是CLI?
CLI是Command line User Interface的简写,中文名称是命令行用户接口。
它就是Dos命令行操作方式。
使用命令行用户接口需要记住一些命令,不方便。
3,GUI常用的类存储在哪儿?
GUI常用的类存储在java.Awt包和javax.Swing包中。
4,Awt和Swing各有什么特点?
Awt是Abstract Window Toolkit的简写,中文名称是抽象窗口工具包,java.Awt需要调用本地系统方法实现功能,属重量级控件。
javax.Swing是在Awt基础上建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属轻量级接口。
5,什么是事件监听机制?
事件监听机制由以下部分组成:
1,事件源(组件)。事件源就是awt包和swing包中的图形界面组件。
2,事件(Event)。每一个事件源都有自己特有的对应事件和共性事件。
3,监听器(Listener)。将可以触发某一个事件的动作(不只一个)都已经封装到了监听器中。
以上三者在java中都已经定义好了,直接获取其对象来用就可以了。
我们要做的就是对产生的事件进行处理。
4,事件处理(引发事件后的处理方式)。
6,事件监听机制的流程是什么样的?
首先有事件源,它能产生事件。然后有监听器,监听器能监听特定事件,并对事件用特定方式进行处理。将监听器注册在事件源上来接收事件。当监听器所监听的事件作用在事件源上时,就产生事件,事件被包装成事件对象,传递给监听器。监听器就对事件进行处理。
/*
如何创建图形化界面?
1,建立Frame窗体。
2,设置窗体的基本参数
大小,位置,布局等
3,定义组件。
4,通过Frame的add方法将组件添加到窗体上。
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类型表示,可以用来返回space,shift
等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对应的keyCode是VK_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培训、期待与您交流! ------------------------
相关文章推荐
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员05-多线程自我提问
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员06-第十三天 自我提问
- 黑马程序员04-第九天 自我提问
- 黑马程序员01-基础课第一天第二天内容自我提问
- 黑马程序员07-静态自我提问
- 黑马程序员10-枚举 自我提问
- 黑马程序员09-网络编程自我提问
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员02-面向对象自我提问
- 黑马程序员-javaGUI编程总结
- I008-黑马程序员_毕向东_Java基础视频教程第01天-08-classpath配置
- 黑马程序员——网络编程、GUI、反射 笔记第十四篇
- 黑马程序员——GUI
- 黑马程序员———GUI
- 黑马程序员__JAVA基础__GUI(图形用户界面)
- 黑马程序员——JAVA基础之GUI
- 黑马程序员——GUI
- 黑马程序员——GUI与网络编程