GUI图形用户界面编程

1.JAVA之GUI编程概述

Windows 操作系统提供两种操作方式:
                        
         1.GUI
       
         2.CLI;

      GUI:Grahi User Interface ,图形用户界面。
            
           特点:用图形的方式,来显示计算机操作的界面,这样更方便更直观。

       CLI: Command line User Interface(命令行用户接口)
          
            特点:
           
           1.常见的Dos命令行操作。
           
           2.需要记忆一些常用的命令,操作不直观。   

      举例:
           
         比如:创建文件夹,或者删除文件夹等。
   
         Java为GUI提供的对象都存在java Awt和javx.Swing两个包中,包内有相关组件。

Awt和Swing

        Java.Awt  : Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。

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



2.JAVA之GUI编程布局

 布局管理器

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

常见的布局管理器:

****************************************************

       1.FlowLayout(流式布局管理器,构造方法可指定对齐方式、水平垂直间距)

           特点:从左到右的顺序排列,默认居中。

如图所示:

  

****************************************************
       2.Borderlayout(边界布局管理器)
       
           特点:按照东南西北中的顺序排列,  Frame默认的布局管理器。

          其中每个部分只可添加一个组件,若添加多个组件,则最后添加的组件会覆盖前面的。  

如图所示:                           

****************************************************
       3.GridLayout(网格布局管理器,构造方法可指定水平垂直间距)

           特点:规则的矩阵  ,系统自带的计算器用的就是这个布局。

   如图所示:

 

****************************************************
       4.CardLayout(卡片布局管理器)
          
           特点:选项卡

 

****************************************************
       5.GridBagLayout(网格包布局管理器,又称坐标式布局(最牛逼最灵活的布局方式。)

           特点:非规则的矩阵,是GridLayout的变种,一个组件可以存放在多个格子之中。  

              通过坐标确定组件位置。

 

****************************************************

       6.混合式布局

           特点:先进行面板布局管理器

3.JAVA之GUI编程Frame窗口

创建图形化界面思路:

1.创建frame窗体;

2.对窗体进行基本设置;

       比如大小、位置、布局

3.定义组件;

4.将组件通过add方法添加到窗体中;

5.让窗体显示,通过setVisible(ture)。

------------------------------

新建一个class类,名称为:studyframe

功能实现如下几点:

1.建立一个窗口;

2.窗口有标题;

3.窗口大小设置;

4.窗口位置设置;

5.窗口可见。

代码如下:

复制代码
import java.awt.Frame;

class studyframe {
    public static void main(String[] args) {
        Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。
        
f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 } }
复制代码

注意:(由于本篇还没有讲到事件监听器,所以本篇中窗体是无法直接关闭的。

想要关闭必须通过进程管理器结束进程方式关掉。)

运行效果如下:

上面代码也可以这么写:

复制代码
import java.awt.Frame;

class studyframe {
    public static void main(String[] args) {
        Frame f = new Frame("窗口——by星云");// 构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
        
f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 } }
复制代码

******************************

功能实现如下几点:

1.建立一个窗口;

2.窗口有标题;

3.窗口大小设置;

4.窗口位置设置;

5.窗口可见。

6.添加一个带有文字标签的按钮;

复制代码
import java.awt.Button;
import java.awt.Frame;

class studyframe {
    public static void main(String[] args) {
        Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。
        
f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。
Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内; } }
复制代码

运行效果如下:

注意:详见Borderlayout(边界布局管理器)

******************************

上面这样肯定不好看,我们对其设置下布局方式来进行优化下。

功能实现如下几点:

1.建立一个窗口;

2.窗口有标题;

3.窗口大小设置;

4.窗口位置设置;

5.窗口可见。

6.添加一个带有文字标签的按钮;

7.窗体设置布局方式。

复制代码
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

class studyframe {
    public static void main(String[] args) {
        Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。
        
        f.setTitle("窗口——by星云");//设置窗口标题内容
        f.setSize(500, 400);//设置窗口大小,宽度500,高度400
        f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200
        f.setVisible(true);//设置窗体可见。
        f.setLayout(new FlowLayout());//设置窗体布局为流式布局。
        
        Button b=new Button("我是一个按钮");//在窗口中添加一个按钮;
        f.add(b);//将按钮添加到窗口内
    }

}
复制代码

运行效果如下:

上面代码也可以这么写,

复制代码
import java.awt.*;

class studyframe {
    public static void main(String[] args) {
        Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。
        
        f.setTitle("窗口——by星云");//设置窗口标题内容
        f.setSize(500, 400);//设置窗口大小,宽度500,高度400
        f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200
        f.setVisible(true);//设置窗体可见。
        f.setLayout(new FlowLayout());//设置窗体布局为流式布局。
        
        Button b=new Button("我是一个按钮");//在窗口中添加一个按钮;
        f.add(b);//将按钮添加到窗口内
    }

}
复制代码

 


参考文献:

 

 

Frame 是带有标题和边框的顶层窗口。

 

 

Window 对象是一个没有边界和菜单栏的顶层窗口。窗口的默认布局是 BorderLayout

构造窗口时,它必须拥有窗体、对话框或其他作为其所有者定义的窗口。

此类创建一个标签按钮。

4.JAVA之GUI编程事件监听机制

事件监听机制的特点:

1.事件源

2.事件

3.监听器

4.事件处理

事件源:就是awt包或者swing包中的那些图形用户界面组件。(如:按钮)

事件:每一个事件源都有自己特点有的对应事件和共性事件。(如:鼠标单击事件)

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

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

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

图解事件监听机制

 


 

 

5.JAVA之GUI编程窗体事件

我们回顾下第三篇时的内容:

3.JAVA之GUI编程Frame窗口窗体是无法直接关闭的,想要关闭须进程管理器结束进程方式关掉。

现在我们就来解决下这个问题。

***********************************************

功能实现如下几点:

1.建立一个窗口;

2.窗口有标题;

3.窗口大小设置;

4.窗口位置设置;

5.窗口可见。

6.添加一个带有文字标签的按钮;

7.窗体设置布局方式。

8.为窗口关闭事件监听器,实现关闭窗口功能。

 *****************************************************************************


 我们要明确:

1.窗体是一个事件源;

2.在事件源上添加监听器并加上处理事件方法即可。

代码如下:

复制代码
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。  f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 f.setLayout(new FlowLayout());//设置窗体布局为流式布局。 f.addWindowListener(new MyWin());//在窗体事件源上添加监听器。 
Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内 } } /*如果用这种方法,就必须把这七个方法全部重写。 class MyWin implements WindowListener { 覆盖七个方法。可以我只用到了关闭的动作。 其他方法都没有用到,如果用这种方法,就必须把这七个方法全部重写。 } 因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。 并覆盖了其中的所有方法。那么我只要继承自WindowAdapter覆盖我需要的方法即可。 */

//创建窗口监听器方法类继承WindowAdapter中的方法。 //下面是个窗口关闭监听器 class MyWin extends WindowAdapter{ public void windowClosing(WindowEvent e) { System.exit(0);//关闭窗口处理关闭动作监听事件 } }
复制代码

注意:现在点击X就可以关闭窗口了。 

运行代码:

上面代码也可以这样写:

复制代码
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class studyframe { public static void main(String[] args) { Frame f = new Frame();//构造一个最初不可见的 Frame 新实例()。  f.setTitle("窗口——by星云");//设置窗口标题内容 f.setSize(500, 400);//设置窗口大小,宽度500,高度400 f.setLocation(300, 200);//设置窗口位置为距离屏幕左边水平方向300,上方垂直方向200 f.setVisible(true);//设置窗体可见。 f.setLayout(new FlowLayout());//设置窗体布局为流式布局。 //在窗体事件源上添加带有处理事件的监听器。 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0);//关闭窗口处理关闭动作监听事件  } }); Button b=new Button("我是一个按钮");//在窗口中添加一个按钮; f.add(b);//将按钮添加到窗口内  } }
复制代码

************************************************************

参考文献:

 

 

 

6.JAVA之GUI编程Action事件

功能:单击一个按钮实现关闭窗口:

复制代码
import java.awt.*;
import java.awt.event.*;

public class StudyAction {

    // 定义该图形所需的组件的引用
    private Frame f;
    private Button but;

    StudyAction() {

        init();

    }

    // 对图形用户界面初始化
    public void init() {

        f = new Frame("窗口——by星云");

        // 对Frame进行基本设置。

        /*
         * f.setBounds(300, 100, 600, 500); 原型:void setBounds(int x, int y, int
         * width, int height)移动组件并调整其大小 这一条语句等价于 f.setLocation(300,
         * 100);//窗口位置水平300,垂直方向200 f.setSize(600, 500);//设置窗口大小,宽度600,高度500
         */

        f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小
        f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局

        but = new Button("点击我将关闭窗口");

        // 将组件添加到frame中
        f.add(but);

        // 加载一下窗体上的事件
        dealwithEvent();

        // 显示窗体
        f.setVisible(true);
    }

    private void dealwithEvent()
    {
         
         f.addWindowListener(new WindowAdapter(){
             public void windowClosing(WindowEvent e){
                 System.exit(0);
                 
             }
             
         });
         
         /*让按钮具备退出程序的功能
                按钮就是事件源
          * 那么选择那个监听器呢?
          * 通过关闭窗体示例了解到想要知道哪个组件具备什么样的特监听器
          * 需要查看该组件对象的功能。*/
         but.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e){
                System.exit(0); 
             }
         });
         
    }

    public static void main(String args[]) {
        new StudyAction();
    }
}
复制代码

运行截图:


 

参考文献:


 

 


7.JAVA之GUI编程鼠标事件

鼠标事件:

功能:

1.基本窗体功能实现

2.鼠标移动监听,当鼠标移动到按钮上时,触发打印事件。

3.按钮活动监听,当按钮活动时,触发打印事件。

4.按钮被单击时触发打印事件。

                                                            

源码如下:

复制代码
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class Mouse_events {


     // 定义该图形所需的组件的引用
    private Frame f;
    private Button but;

    Mouse_events() {

        init();

    }

    // 对图形用户界面初始化
    public void init() {

        f = new Frame("窗口——by星云");
        f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小
        f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局

        but = new Button("我是按钮");
        f.add(but);
        
        dealwithEvent();

        f.setVisible(true);
    }

    //事件监听器以及处理事件
    private void dealwithEvent()
    {
         
        //窗体关闭监听
         f.addWindowListener(new WindowAdapter(){
             public void windowClosing(WindowEvent e){
                 System.exit(0);
                 
             }
             
         });
         
         //按钮活动监听器以及处理事件
         but.addActionListener(new ActionListener()
         {
             private int actioncount=1;
             public void actionPerformed(ActionEvent e)
             {
                 System.out.println("按钮被活动"+actioncount+++"次");
             }
             
         });
         
         //鼠标进入按钮监听触发事件以及鼠标被双击监听触发事件
         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+++"次");
             }
             
         });
        
    }
    public static void main(String[] args) {

          new Mouse_events();
    }

}
复制代码

运行截图:


 

参考文献:

 


8.JAVA之GUI编程键盘码查询器

程序使用说明:

 1.本程序由于是java代码编写,所以运行需安装jdk并配置好环境变量。

 2. 复制java代码到记事本内,另存为Keyboard_events.java;

 3.复制批处理代码到记事本内,另存为运行.bat。

4.双击运行.bat批处理即可执行,当前窗体必须为软件界面才能查询。

批处理代码:

@echo off
javac Keyboard_events.java
java Keyboard_events
@pause
del *.class

Java代码:

复制代码
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Keyboard_events {

    // 定义该图形所需的组件的引用
    private Frame f;
    private Button but;

    Keyboard_events() {

        init();

    }

    // 对图形用户界面初始化
    public void init() {

        f = new Frame("键盘码查询器——by星云");
        f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小
        f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局

        but = new Button("ESC或者ctrl+enter退出程序!");// 新建一个按钮
        f.add(but);// 将按钮添加到窗体上。

        dealwithEvent();// 加载事件处理

        f.setVisible(true);// 设置窗体可见
    }

    // 事件监听器以及处理事件
    private void dealwithEvent() {

        // 窗体关闭监听
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);

            }

        });

        // 键盘监听
        but.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                
                //如果按下ESC或者按下CTRL+enter退出程序
                if ((e.getKeyCode() == KeyEvent.VK_ESCAPE) || (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER)  ) {
                    System.out.println(KeyEvent.getKeyText(KeyEvent.VK_ESCAPE)+ "键盘码为:" + e.getKeyCode());
                    System.exit(0);
                } else {
                    
                    System.out.println(KeyEvent.getKeyText(e.getKeyCode())+ "键盘码为:" + e.getKeyCode());
                    
                }
            }

        });

    }

    public static void main(String[] args) {

        new Keyboard_events();
    }

}
复制代码

运行截图:


9.JAVA之GUI编程列出指定目录内容

代码如下:

复制代码
/*列出指定目录内容*/
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

class MyWindowDemo {
    private Frame f;
    private TextField tf;
    private Button but;
    private TextArea ta;

    MyWindowDemo() {
        init();
    }

    public void init() {
        f = new Frame("by 星云");//创建窗体对象
        f.setBounds(300, 100, 600, 500);//设置窗体位置和大小
        f.setLayout(new FlowLayout());//设置窗体布局为流式布局

        tf = new TextField(60);//创建单行文本对象60长度大小字符

        but = new Button("转到");//创建按钮对象

        ta = new TextArea(25, 70);//创建多行文本对象25行,70列

        f.add(tf);//单行文本添加到窗体上
        f.add(but);//按钮添加到窗体上
        f.add(ta);//多行文本添加到窗体上

        myEvent();//加载事件处理
        f.setVisible(true);//设置窗体可见

    }

    private void myEvent() {
        
        //按钮事件监听器
        but.addActionListener(new ActionListener()
        {

            public void actionPerformed(ActionEvent e) {
                String dirPath=tf.getText();//获取单行文本内容保存到字符串dirPath中
                File dir=new File(dirPath);//将字符串dirPath封装成文件
                
                //如果文件存在,而且是个目录执行下列操作
                if(dir.exists() &&dir.isDirectory())
                {
                    ta.setText(null);//没打开一个目录前清空多行文本内容
                    String[] names=dir.list();//文件目录列表存放到字符数组中
                    for(String name :names)
                    {
                        ta.append(name+"\r\n");//追加文本内容并换行
                        
                    }
                }
                
                
            }
            
            
        });
        //窗体关闭监听器
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);

            }

        });

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

}
复制代码

程序截图:


10.JAVA之GUI编程弹出对话框Dialog

在上节基础上添加对话框显示错误信息。

代码如下:

复制代码
/*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体。*/
/*练习-列出指定目录内容*/
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

class MyWindowDemo {
    private Frame f;
    private TextField tf;
    private Button but;
    private TextArea ta;
    private Dialog d;
    private Label lab;
    private Button okBut;

    MyWindowDemo() {
        init();
    }

    public void init() {
        f = new Frame("by 星云");// 创建窗体对象
        f.setBounds(300, 100, 600, 500);// 设置窗体位置和大小
        f.setLayout(new FlowLayout());// 设置窗体布局为流式布局

        tf = new TextField(60);// 创建单行文本对象60长度大小字符

        but = new Button("转到");// 创建按钮对象

        ta = new TextArea(25, 70);// 创建多行文本对象25行,70列

        d = new Dialog(f, "提示信息-self", true);//弹出的对话框
        d.setBounds(400, 200, 350, 150);//设置弹出对话框的位置和大小
        d.setLayout(new FlowLayout());//设置弹出对话框的布局为流式布局
        lab = new Label();//创建lab标签填写提示内容
        okBut = new Button("确定");//创建确定按钮

        d.add(lab);//将标签添加到弹出的对话框内
        d.add(okBut);//将确定按钮添加到弹出的对话框内。

        f.add(tf);// 单行文本添加到窗体上
        f.add(but);// 按钮添加到窗体上
        f.add(ta);// 多行文本添加到窗体上

        myEvent();// 加载事件处理
        f.setVisible(true);// 设置窗体可见

    }

    private void myEvent() {

        // 确定按钮监听器
        okBut.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                d.setVisible(false);
            }

        });

        //文本框兼容器
        tf.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER)//如果按下回车键执行showDir()功能函数
                    showDir();//调用功能函数
            }

        });

        // 对话框监听器
        d.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {

                d.setVisible(false);//设置对话框不可见

            }

        });

        // 按钮事件监听器
        but.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                showDir();
            }

        });
        // 窗体关闭监听器
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);

            }

        });

    }

    //showDir()功能函数
    private void showDir(){
        String dirPath = tf.getText();// 获取单行文本内容保存到字符串dirPath中
        File dir = new File(dirPath);// 将字符串dirPath封装成文件

        // 如果文件存在,而且是个目录执行下列操作
        if (dir.exists() && dir.isDirectory()) {
            ta.setText(null);// 没打开一个目录前清空多行文本内容
            String[] names = dir.list();// 文件目录列表存放到字符数组中
            for (String name : names) {
                ta.append(name + "\r\n");// 追加文本内容并换行

            }
        } else {

            String info = "您输入的路径" + dirPath + "是错误的,请重新输入!";
            lab.setText(info);//显示文本错误提示信息
            d.setVisible(true);//设置对话框可见。
        }
    }

    public static void main(String[] args) {

        new MyWindowDemo();
    }

}
复制代码


11.JAVA之GUI编程菜单

功能:添加菜单组件

知识总结:

 


 

代码如下:

复制代码
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class MyMenuDemo
{
      private Frame f;//定义窗体
      private MenuBar mb;//定义菜单栏
      private Menu m,subMenu;//定义"文件"和"子菜单"菜单
      private MenuItem closeItem,subItem;//定义条目“退出”和“子条目”菜单项
      
      MyMenuDemo()
      {
           init();
      }
     
      /*图形用户界面组件初始化*/
      public void init()
      {
          f=new Frame("my window");//创建窗体对象
          f.setBounds(300,100,500,600);//设置窗体位置和大小
          f.setLayout(new FlowLayout());//设置窗体布局为流式布局

          mb=new MenuBar();//创建菜单栏
       
          m=new Menu("文件");//创建“文件”菜单    
          subMenu = new Menu("子菜单");//创建“子菜单”菜单
          
          subItem=new MenuItem("子条目");//创建“子条目”菜单项
          closeItem=new MenuItem("退出");//创建“退出"菜单项
          
          m.add(subMenu);//将“子菜单”菜单添加到“文件”菜单上
          m.add(closeItem);//将“退出”菜单项添加到“文件”菜单上
 
          subMenu.add(subItem);//"子条目"菜单项添加到"子菜单"菜单项中
     
          mb.add(m);//将文件添加到菜单栏上
          
          f.setMenuBar(mb);//将此窗体的菜单栏设置为指定的菜单栏。

          myEvent();//加载事件处理

          f.setVisible(true);//设置窗体可见

       }  
        private void myEvent()
       {
            // 窗体关闭监听
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);

                }

            });
            
            //退出菜单项监听
            closeItem.addActionListener(new ActionListener()
            {
                  public void actionPerformed(ActionEvent e)
                  {
                       System.exit(0);
                  }
     
            });
       }
        
       public static void main(String[] args)
       {
              new MyMenuDemo();
        }
}
复制代码

程序截图:


12.JAVA之GUI编程打开与保存文件

功能:java图形用户界面开发,练习打开保存文件

代码如下:

复制代码
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

class MyMenuDemo {
    private Frame f;// 定义窗体
    private MenuBar bar;// 定义菜单栏
    private TextArea ta;
    private Menu fileMenu;// 定义"文件"和"子菜单"菜单
    private MenuItem openItem, saveItem, closeItem;// 定义条目“退出”和“子条目”菜单项

    private FileDialog openDia, saveDia;// 定义“打开、保存”对话框
    private File file;//定义文件

    MyMenuDemo() {
        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() {
        
        // 打开菜单项监听
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                openDia.setVisible(true);//显示打开文件对话框
                
                String dirpath = openDia.getDirectory();//获取打开文件路径并保存到字符串中。
                String fileName = openDia.getFile();//获取打开文件名称并保存到字符串中
                
                if (dirpath == null || fileName == null)//判断路径和文件是否为空
                    return;
                else
                    ta.setText(null);//文件不为空,清空原来文件内容。
                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 (FileNotFoundException e1) {
                    // 抛出文件路径找不到异常
                    e1.printStackTrace();
                } catch (IOException e1) {
                    // 抛出IO异常
                    e1.printStackTrace();
                }

            }

        });
        
        // 保存菜单项监听
        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;//空操作
                    else
                        file=new File(dirpath,fileName);//文件不为空,新建一个路径和名称
                }
                    try {
                        BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
                        
                        String text = ta.getText();//获取文本内容
                        bufw.write(text);//将获取文本内容写入到字符输出流
                        
                        bufw.close();//关闭文件
                    } catch (IOException e1) {
                        //抛出IO异常
                        e1.printStackTrace();
                    }
                

            }

        });
        
        // 退出菜单项监听
        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 MyMenuDemo();
    }
}
复制代码

程序截图:


13.JAVA之GUI编程将程序打包jar

jar基本命令:


目标:将下列MyMenuDemo.java代码打包成jar。

 

方法如下:

1.把java代码放到d:\myclass目录下。

2.按下快捷键ctrl+r,打开运行窗口,输入cmd后回车。

3.输入"d:"后按下回车键,进入D盘根目录。

4.输入命令:cd myclass,按下回车键。

5.编译java源码文件,输入命令javac MyMenuDemo.java,之后按下回车键执行命令。

 

之后删除源码MyMenuDemo.java文件。

6.编写配置信息1.txt,内容如下:

7.输入命令cd..退到D盘根目录,然后输入命令jar -cvfm my_jarname.jar 1.txt myclass。

8.双击my_jarname.jar文件,打开程序。

                                                

附录:

java代码如下:

复制代码
package myclass;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

class MyMenuDemo {
    private Frame f;// 定义窗体
    private MenuBar bar;// 定义菜单栏
    private TextArea ta;
    private Menu fileMenu;// 定义"文件"和"子菜单"菜单
    private MenuItem openItem, saveItem, closeItem;// 定义条目“退出”和“子条目”菜单项

    private FileDialog openDia, saveDia;// 定义“打开、保存”对话框
    private File file;//定义文件

    MyMenuDemo() {
        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() {
        
        // 打开菜单项监听
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                openDia.setVisible(true);//显示打开文件对话框
                
                String dirpath = openDia.getDirectory();//获取打开文件路径并保存到字符串中。
                String fileName = openDia.getFile();//获取打开文件名称并保存到字符串中
                
                if (dirpath == null || fileName == null)//判断路径和文件是否为空
                    return;
                else
                    ta.setText(null);//文件不为空,清空原来文件内容。
                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 (FileNotFoundException e1) {
                    // 抛出文件路径找不到异常
                    e1.printStackTrace();
                } catch (IOException e1) {
                    // 抛出IO异常
                    e1.printStackTrace();
                }

            }

        });
        
        // 保存菜单项监听
        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;//空操作
                    else
                        file=new File(dirpath,fileName);//文件不为空,新建一个路径和名称
                }
                    try {
                        BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
                        
                        String text = ta.getText();//获取文本内容
                        bufw.write(text);//将获取文本内容写入到字符输出流
                        
                        bufw.close();//关闭文件
                    } catch (IOException e1) {
                        //抛出IO异常
                        e1.printStackTrace();
                    }
                

            }

        });
        
        // 退出菜单项监听
        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 MyMenuDemo();
    }
}
复制代码

非常感谢您有耐心看完了此文。

为了表示报答,特此献出一秘籍 。

***************************************************

如果jar文件关联失败,想单击一个文件就启动软件如何做呢?

用批处理搞定,编写批处理特别简单,只需记事本写内容,写好后另存为*.bat文件就行。

如果是MyMenuDemo.java源码可编写下列批处理,可实现单击启动程序功能。

Run.bat文件内容如下:

@echo off
javac MyMenuDemo.java
java MyMenuDemo
@pause
del *.class

如果是MyMenuDemo.jar文件,那么编写批处理:

run.bat,文件内容如下:

java -jar MyMenuDemo.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值