java笔记-GUI编程

来源:互联网 发布:ubuntu软件中心没了 编辑:程序博客网 时间:2024/06/05 14:49

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

GUI(图形用户界面)

Graphical User Interface(图形用户接口)

java为GUI提供的对象都存在java.Awt和java.Swing两个包中。

java.Awt:Abstract windows toolkit(抽象窗体工具包),需要调用本地系统方法实现功能,属重量级控件。

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

GUI继承关系图


新建窗体

import java.awt.*;import java.awt.event.*;class FrameDemo {public static void main(String[] args) {//new frameFrame f=new Frame("My Frame");//set frame visiblef.setVisible(true);//set layoutf.setLayout(new FlowLayout());f.setSize(500,300);f.setLocation(100,100);Button but=new Button("确定");//add button to framef.add(but);//create new windowListenerf.addWindowListener(new WindowAdapter(){//close frame and print "closing"public void windowClosing(WindowEvent e){System.out.println("closing");System.exit(0);}//activate frame and print "front"public void windowActivated(WindowEvent e){System.out.println("front");}});}}

鼠标事件

import java.awt.*;import java.awt.event.*;class MouseAndKeyEvent {public static void main(String[] args) {//新建窗体对象。Frame f=new Frame("Cs Frame");/*f.setLocation(100,100);f.setSize(600,400);*///设置窗体边界f.setBounds(100,100,600,400);//设置布局模式。f.setLayout(new FlowLayout());f.setVisible(true);//新建按钮对象。Button bu=new Button("退出");//向窗体中添加按钮f.add(bu);//添加窗体监听事件f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.out.println("closing");System.exit(0);}});//添加按钮监听事件bu.addMouseListener(new MouseAdapter(){int MouseCount=1;public void mouseClicked(MouseEvent ea){//设置双击事件。if(ea.getClickCount()==2)System.out.println("double click:"+MouseCount++);//System.exit(0);}public void mouseEntered(MouseEvent es){System.out.println("come in");}public void mouseExited(MouseEvent ed){System.out.println("come out");}});}}

文件列表浏览器

思路:

1.构建窗体,该窗体包含文本框,按钮,文本区域

2.添加窗体关闭事件

3.添加按钮事件监听器

4.在按钮事件监听器中设置浏览文本框目录中的所有子目录和文件列表。

5.若目录出现错误,则弹出对话框提示目录有误。

6.关闭对话框。

import java.io.*;import java.awt.*;import java.awt.event.*;class TextDemo {//新建窗体,文本框,按钮等。private Frame f;private TextField tf;private TextArea ta;private Button b;private Label lab;private Button subBut;private Dialog dia;//在构造函数中初始化窗体信息。TextDemo(){Init();//event();}public void Init(){/*** 设置窗体,按钮,文本框,文本区域属性。*/f= new Frame("My Frame");f.setBounds(300,300,600,400);f.setLayout(new FlowLayout());tf=new TextField();b=new Button("转到...");ta=new TextArea(30,78);tf.setColumns(70);lab=new Label();subBut=new Button("确定");dia=new Dialog(f,"目录错误",true);dia.setBounds(300,300,400,300);dia.setLayout(new FlowLayout());/*** 向弹出的窗体中添加label,button等。*/dia.add(lab);dia.add(subBut);dia.setVisible(false);f.add(tf);f.add(b);f.add(ta);//事件响应信息。event();f.setVisible(true);}public void event(){//增加窗体关闭监听事件。f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//增加对话框关闭监听事件。dia.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){//关闭(隐藏)对话框。dia.setVisible(false);}});//增加对话框按钮事件监听。subBut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//关闭(隐藏)对话框。dia.setVisible(false);}});//设置按回车键对话框按钮退出。subBut.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){if((e.getKeyCode())==KeyEvent.VK_ENTER){dia.setVisible(false);}}});//设置按回车键文本区域自动显示文本。tf.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){if(e.getKeyCode()==KeyEvent.VK_ENTER){showDir();}}});//增加事件监听,点击按钮时,在文本区域显示文本框目录中的所有子目录和文件。b.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){showDir();}});}/*** 根据文本框中的目录显示所有子目录和文件列表。*/private void showDir(){String dirPath=tf.getText();//将字符串转化为父目录File dir=new File(dirPath);//在对目录操作前判断该目录是否存在以及是否为目录if(dir.exists()&&(dir.isDirectory())){//在显示目录内容前清空目录ta.setText("");//列出目录中的所有子目录和文件String[] name=dir.list();//遍历目录中的子目录和文件并换行。for(String n:name){//追加行到文本区域ta.append(n+"\r\n");}}else{String info="您输入的目录:"+dirPath+"有误!请核实后重新输入。";lab.setText(info);//发生错误弹出对话框。dia.setVisible(true);}}public static void main(String[] args) {//调用构造函数初始化new TextDemo();}}


该程序的关键在于将文本框的文字信息转化为目录,并在文本区域中遍历该目录中的所有信息并显示(显示前需清空文本显示区域),在遍历前需要先判断文本框中的是否为目录以及该目录是否存在。

新建菜单

思路:

1.构建窗体

2.初始化菜单栏,菜单,子菜单,菜单条目

3.将菜单条目添加到菜单,将子菜单添加到菜单,将菜单添加到菜单栏,将菜单栏添加到窗体。

4.设置菜单关闭程序和窗体关闭程序事件监听器。

import java.awt.*;import java.awt.event.*;class  MenuDemo{MenuDemo(){FrameInit();}//窗体Frame f;//菜单Menu m1,m2,subMenu;//菜单栏MenuBar mb;//菜单条目MenuItem mi_newFile,miOpenFile,miClose,subItemCom,subItemJava;private void FrameInit(){f=new Frame("My Menu");f.setBounds(400,300,600,500);f.setLayout(new FlowLayout());f.setVisible(true);//主菜单m1=new Menu("文件");m2=new Menu("编辑");//条目//mi_newFile=new MenuItem("新建");miOpenFile=new MenuItem("打开");miClose=new MenuItem("退出");//子菜单subMenu=new Menu("新建");//子条目subItemCom=new MenuItem("普通文件");subItemJava=new MenuItem("java文件");//添加子条目subMenu.add(subItemCom);subMenu.add(subItemJava);//添加条目m1.add(subMenu);m1.add(miOpenFile);m1.add(miClose);//添加菜单mb=new MenuBar();mb.add(m1);mb.add(m2);//将菜单加入窗体。f.setMenuBar(mb);MyEvent();}private void MyEvent(){//添加窗体关闭监听事件f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//添加菜单关闭窗体事件监听器miClose.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});}public static void main(String[] args) {new MenuDemo();}}


所有的子菜单都是菜单,将新菜单添加到父菜单,则新菜单就是子菜单。查询相应的组件可找到相应的事件监听器。

文件的新建保存和打开

思路:

打开文件:

1.添加文件对话框,设置模式为FileDialog.Load

2.根据打开文件的对话框获取路径和文件名,再根据路径和文件名获得文件对象。

3.根据文件对象,遍历文件对象的每一行内容,并追加到文本区域。

保存文件:

1.添加文件对话框,设置模式为FileDialog.Save

2.根据保存文件对话框获取路径和文件名,再根据路径和文件名获取文件对象。

3.根据文件对象,将文本区域的内容写入文件对象,并刷新文件对象缓存。

4.在保存文件前,需先判断该文件对象是否为空,如果为空则弹出保存对话框,否则直接将内容写入文件。

package MyPackage;import java.awt.*;import java.io.*;import java.awt.event.*;public class  OpenFileDemo{OpenFileDemo(){FrameInit();}//FileFile file;//窗体Frame f;//菜单Menu m1,m2,subMenu;//菜单栏MenuBar mb;//菜单条目MenuItem mi_newFile,miOpenFile,miClose,subItemCom,subItemJava,saveFile;//打开文件对话框。FileDialog openDialog,saveDialog;TextArea ta;private void FrameInit(){f=new Frame("My Menu");f.setBounds(400,300,600,500);f.setVisible(true);//主菜单m1=new Menu("文件");m2=new Menu("编辑");//条目//mi_newFile=new MenuItem("新建");miOpenFile=new MenuItem("打开");saveFile=new MenuItem("保存");miClose=new MenuItem("退出");//子菜单subMenu=new Menu("新建");//子条目subItemCom=new MenuItem("普通文件");subItemJava=new MenuItem("java文件");//添加子条目subMenu.add(subItemCom);subMenu.add(subItemJava);//添加条目m1.add(subMenu);m1.add(miOpenFile);m1.add(saveFile);m1.add(miClose);//添加菜单mb=new MenuBar();mb.add(m1);mb.add(m2);//将菜单加入窗体。f.setMenuBar(mb);//保存和打开对话框openDialog=new FileDialog(f,"Open File Dialog",FileDialog.LOAD);saveDialog=new FileDialog(f,"Save File Dialog",FileDialog.SAVE);//文本区域设置ta=new TextArea();f.add(ta);MyEvent();}private void MyEvent(){//添加窗体关闭监听事件f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//添加菜单关闭窗体事件监听器miClose.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});//文件的打开miOpenFile.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//设置打开文件对话框可见。openDialog.setVisible(true);//通过打开文件对话框获取路径和文件名。String dirPath=openDialog.getDirectory();String fileName=openDialog.getFile();//路径和文件名获取后判断路径和文件名是否有效。if((dirPath==null)||(fileName==null)){return;}//根据路径和文件名构建文件对象。file=new File(dirPath,fileName);String line=null;//添加文本前清空文本区域ta.setText("");try{//设置缓存,接收文件对象中的内容。BufferedReader bufr=new BufferedReader(new FileReader(file));//循环读取文件并追加到文本区域。while((line=bufr.readLine())!=null){ta.append(line+"\r\n");}}catch(IOException ex){throw new RuntimeException("file read error.");}}});//保存文件。saveFile.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if(file==null){//设置保存文件对话框可见。saveDialog.setVisible(true);//根据打开文件对话框获取保存路径和文件名。String savePath=saveDialog.getDirectory();String saveFile=saveDialog.getFile();//获取保存路径和文件名后判断路径和文件名是否有效。if((savePath==null)||(saveFile==null)){return;}//根据路径和文件名构建文件对象。file=new File(savePath,saveFile);}//获取文本区域中的内容。String taStr=ta.getText();try{//构建写入文件缓存BufferedWriter bufw=new BufferedWriter(new FileWriter(file));//将文本区域中的内容写入文件。bufw.write(taStr);//由于设置了缓存,需要刷新。bufw.flush();//关闭缓存。bufw.close();}catch(IOException exc){throw new RuntimeException("file save error.");}}});//新建文件subItemJava.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//清空文本区域即为新建。可输入文字内容。ta.setText("");file=null;}});}public static void main(String[] args) {new OpenFileDemo();}}


注意根据文件对话框获取文件路径和文件名,在对文件进行操作前,需先判断文件的有效性。文件保存时,需先判断文件是否存在,如果不存在则弹出保存对话框,如果存在则直接保存。

该过程的学习涉及到jar文件的制作。在源文件中添加包package MyPackage;

然后执行编译:javac OpenFileDemo.java -d h:\package\ok\

之后会在h:\package\ok\目录下生成一个名为MyPackage的文件夹,里面含有程序运行的所有类。

在ok目录下添加1.txt文件,内容为

Main-Class: MyPackage/OpenFileDemo

以上为设置程序运行主类引导。

进入h:\package\ok目录,然后执行jar -cvfm OpenFileDemo.jar 1.txt -C MyPackage/ .

即可在ok目录下生成OpenFileDemo.jar文件,在命令行执行java -jar OpenFileDemo.jar即可运行,也可双击运行。


0 0