Java基础-22-GUI编程

Java基础-GUI编程

GUI编程

1、GUI(概述)

GUI(图形用户界面)

GUI:

*Graphical User Interface(图形用户接口)
*用图形的方式,来显示计算机操作的界面,这样更方便更直观。

CLI:

*Command Line User Interface(命令行用户接口)
*就是常见的Dos命令操作
*需要记忆一些常用的命令,操作不直观

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

Awt和Swing

*java.awt:Abstract Window Toolkit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。
*javax.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属于轻量级控件。

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

2、GUI(布局)

布局管理器

*容器中的组件的排放方式,就是布局。
*常见的布局管理器。
    *FlowLayout(流式布局管理器)
               *从左到右的顺序排列。
               *Panel默认的布局管理器。
    *BorderLayout(边界布局管理器)
               *东、南、西、北、中。
               *Frame默认的布局管理器。
    *GridLayout(网格布局管理器)
               *规则的矩阵
    *CardLayout(卡片布局管理器)
               *选项卡
    *GridBagLayout(网格包布局管理器)
               *非规则的矩形

3、GUI(Frame)

创建图形化界面:

1、创建frame窗体。
2、对窗体进行基本设置。比如:大小,位置,布局
3、定义组件。
4、将组件通过窗体的add方法添加到窗体中。
5、让窗体显示,通过setVisible(true)

测试代码:

import java.awt.*;
class AwtDemo
{
    public static void main(String [] args)
    {
        Frame f = new Frame ("my awt");
        f.setSize(500,400);
        f.setLocation(300,200);
        f.setLayout(new FlowLayout());

        Button b = new Button("我是一个按钮");

        f.add(b);
        f.setVisible(true);
    }
}

4、GUI(事件监听机制)

事件监听机制的组成

*事件源(组件)
*事件(Event)
*监听器(Listener)
*事件处理(引发事件后处理方式)

事件监听机制流程图

事件监听机制的特点

(1)、事件源:就是awt包或者swing包中那些图形界面组件
(2)、事件:每一个事件源都有自己特有的对应事件和共性事件
(3)、监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
(4)、事件处理:以上三者,在Java中都已经定义好了,直接获取其对象来用就可以了。我们要做的事情是,就是对产生的动作进行处理。

5、GUI(窗体事件)

测试代码:

import java.awt.*;
import java.awt.event.*;//子包
class AwtDemo_1
{
    public static void main(String [] args)
    {
        Frame f = new Frame ("my awt");
        f.setSize(500,400);
        f.setLocation(300,200);
        f.setLayout(new FlowLayout());

        Button b = new Button("我是一个按钮");

        f.add(b);
        f.setVisible(true);

        //监听器使用
        f.addWindowListener(new WindowAdapter()//匿名内部类
        {
            public void windowClosing(WindowEvent e)//专门应付窗口右上角x关闭符号的事件
            {
                System.out.println("我关");
                System.exit(0);
            }
            public void windowActivated(WindowEvent e)//只要窗口前置就触发
            {
                System.out.println("我活了");
            }
            public void windowOpened(WindowEvent e )
            {
                System.out.println("我被打开了!HAHA");
            }
        });
    }
}

输出结果:

以下是一段代码说明:

/*
class MyWin implements WindowListener
{
    //覆盖7个方法,但我只用到了关闭的动作,
    //其他动作都没有用到,可是却必须复写。
}
*/

因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。 并覆盖了其中的所有方法,那么我只要继承自WindowAdapter覆盖我需要的方法即可。

class MyWin extends WindowAdapter
{
    public void windowClosing(WindowEvent e)
    {
        System.out.println("我关了");
    }
}

6、GUI(Action事件)

测试代码:

import java.awt.*;
import java.awt.event.*;
class FrameDemo_2
{
    //定义该图形中所需要的组件的引用
    private Frame f;
    private Button but;
    FrameDemo_2()
    {
        init();
    }
    public void init()
    {
        f= new Frame("my frame");
        //对frame进行基本设置
        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());

        but = new Button("my button");

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

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

        //显示窗体
        f.setVisible(true);
    }
    public void myEvent()
    {
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e )
            {
                System.exit(0);
            }
        });
        //让按钮具备退出程序的功能
        /*
        按钮就是事件源,
        那么选择哪个监听器呢?
        通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器,
        需要查阅该组件对象的功能,
        通过查阅button的描述,发现按钮支持一个特有监听器addActionListener
        */
        but.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e )
            {
                System.out.println("退出,按钮干的");
                System.exit(0);
            }
        });
    }
}
class FrameTest
{
    public static void main(String [] args)
    {
        new FrameDemo_2();
    }
}

当点击了窗口上的按钮后,就在控制台打印了以上文字。

7、GUI(鼠标事件)

Demo

import java.awt.*;
import java.awt.event.*;
class FrameDemo_2
{
    //定义该图形中所需要的组件的引用
    private Frame f;
    private Button but;
    FrameDemo_2()
    {
        init();
    }
    public void init()
    {
        f= new Frame("my frame");
        //对frame进行基本设置
        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());

        but = new Button("my button");

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

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

        //显示窗体
        f.setVisible(true);
    }
    public void myEvent()
    {
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e )
            {
                System.exit(0);
            }
        });
        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++);
                }
            }
        });
    }
}
class FrameTest
{
    public static void main(String [] args)
    {
        new FrameDemo_2();
    }
}

输出结果:

8、GUI(键盘事件)

Demo

import java.awt.*;
import java.awt.event.*;
class FrameDemo_2
{
    //定义该图形中所需要的组件的引用
    private Frame f;
    private Button but;
    private TextField tf;//文本框
    FrameDemo_2()
    {
        init();
    }
    public void init()
    {
        f= new Frame("my frame");
        //对frame进行基本设置
        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());

        but = new Button("my button");

        tf = new TextField(20);//设置长度


        //将组件添加到frame中
        f.add(but);
        f.add(tf);
        //加载一下窗体上的事件
        myEvent();

        //显示窗体
        f.setVisible(true);
    }
    public void myEvent()
    {
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e )
            {
                System.exit(0);
            }
        });
        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++);
                }
            }
        });
        //给but添加一个监听器(键盘的)
        but.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
                {
                    System.out.println("ctrl+enter is run");
                }
            }
        });
        tf.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                int code = e.getKeyCode();
                if(code >=KeyEvent.VK_0&&code<=KeyEvent.VK_9)
                {
                    System.out.println((int)code+"...是非法的");
                    e.consume();//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
                }
            }
        });
    }
}
class FrameTest
{
    public static void main(String [] args)
    {
        new FrameDemo_2();
    }
}

输出结果:

9、GUI(练习-列出指定目录内容)

文本框事件:getText();//不断覆盖文本内容,append();//追加打印

练习:在文本框中输入目录,点击“转到”按钮,将该目录中的文件与文件夹名称列在下面的文本区域中。 Demo

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindowDemo
{
    private Frame f ;
    private TextField tf ;
    private Button but ;
    private TextArea ta ;

    MyWindowDemo()
    {
        init();
    }
    public void init()
    {
        f = new Frame("my Window");
        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());

        tf = new TextField(60);
        but = new Button("转到");
        ta = new TextArea(25,70);
        f.add(tf);
        f.add(but);
        f.add(ta);
        myEvent();
        f.setVisible(true);
    }
    public void myEvent()
    {
        but.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                String dirPath = tf.getText();
                File dir = new File(dirPath);
                if(dir.exists()&&dir.isDirectory())
                {
                    ta.setText("");
                    String [] names = dir.list();
                    for(String name : names)
                    {

                        ta.append(name+"\r\n");//追加打印
                        //ta.setText(name+"\r\n");

                        //System.out.println(name+"\r\n");
                    }
                }
            }
        });
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e )
            {
                System.exit(0);
            }
        });
    }
}
class MyWindowDemoTest
{
    public static void main(String[]args)
    {
        new MyWindowDemo();
    }
}

输出结果:

10、GUI(对话框dialog)

Demo

import java.awt.*;
import java.awt.event.*;
import java.io.*;
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("my Window");
        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());

        d = new Dialog(f,"提示信息-self",true);
        d.setBounds(400,200,400,150);
        d.setLayout(new FlowLayout());

        lab = new Label();
        okBut = new Button("不确定");

        d.add(lab);
        d.add(okBut);

        tf = new TextField(60);
        but = new Button("转到");
        ta = new TextArea(25,70);
        f.add(tf);
        f.add(but);
        f.add(ta);


        myEvent();
        f.setVisible(true);
    }
    public void myEvent()
    {
        but.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                showDir();
            }
        });
        tf.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                if(e.getKeyCode()==KeyEvent.VK_ENTER)
                {
                    showDir();
                }
            }
        });

        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e )
            {
                System.exit(0);
            }
        });
        d.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e )
            {
                d.setVisible(false);
            }
        });
        okBut.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                d.setVisible(false);
            }
        });

    }
    public void showDir()
    {
                String dirPath = tf.getText();
                File dir = new File(dirPath);
                if(dir.exists()&&dir.isDirectory())
                {
                    ta.setText("");
                    String [] names = dir.list();
                    for(String name : names)
                    {

                        ta.append(name+"\r\n");//追加打印
                        //ta.setText(name+"\r\n");

                        //System.out.println(name+"\r\n");
                    }
                }
                else
                {
                    String info = "您输入的信息:"+dirPath+"是错误的!请重新输入";
                    lab.setText(info);
                    d.setVisible(true);
                }
    }
}
class MyWindowDemoTest
{
    public static void main(String[]args)
    {
        new MyWindowDemo();
    }
}

11、GUI(菜单)

测试代码:

import java.awt.*;
import java.awt.event.*;
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("退出");

        subMenu.add(subItem);
        m.add(subMenu);
        m.add(closeItem);
        mb.add(m);
        f.setMenuBar(mb);

        myEvent();
        f.setVisible(true);
    }
    private void myEvent()
    {
        closeItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        });
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
}
class MyMenuDemoTest
{
    public static void main(String [] args)
    {
        new MyMenuDemo();
    }
}

输出结果:

12、GUI(练习-打开)

测试代码:

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

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);
    }

    public 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 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);
            }
        });
    }

}
class  MyMenuTestDemo
{
    public static void main(String[]    args)
    {
         new MyMenuTest();
    }
}

输出结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值