黑马程序员---java基础知识之GUI

java基础知识之GUI

 

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

 

1.GUI 概述

全称:Graphical User Interface(图形用户接口)

作用:用图形的方式,来显示计算机操作的界面,这样更方便更直观

常调用的包:Awt和Swing

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

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

继承关系图:

 

2.常见的布局管理器

  • FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。
  • BorderLayout(边界布局管理器)东,南,西,北,中。  Frame默认的布局管理器。
  • GridLayout(网格布局管理器)规则的矩阵
  • CardLayout(卡片布局管理器)选项卡
  • GridBagLayout(网格包布局管理器)非规则的矩阵

创建图形化界面的步骤:

1.创建frame窗体并命名窗体;

2.对窗体进行基本设置(比如大小,位置,布局)

3.定义组件(按钮,文本组件、复选框等)

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

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

举例说明:

class  SwingDemo

{

    public static void main(String[] args)

    {

        JFrame f = new JFrame();

 

        f.setBounds(300,100,500,400);

 

        f.setLayout(new FlowLayout());

 

        JButton but = new JButton("我是一个按钮");

 

        f.add(but);

 

        f.addWindowListener(new WindowAdapter()

        {

            public void windowClosing(WindowEvent e)

            {

                System.exit(0);

            }

        });

        f.setVisible(true);

    }

}

3.事件监听机制

 

事件监听机制组成

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

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

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

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

事件处理(引发事件后处理方式):就是对产生的动作进行处理的方法。

事件监听机制流程图

例如:

class MyWinextends WindowAdapter{

    publicvoid windowClosing(WindowEvent e){

        System.out.println("hahahha");

        System.exit(0);

    }

}

publicclass FrameDemo {//如果写成内部类的形式那么前面必须加上public static,因为主方法是静态的,不能调用动态类或者方法

    publicstaticvoid main(String[] args) {

        //设置窗体

        Frame f =new Frame("窗体");

        f.setSize(400, 300);

        f.setLocation(500, 300);//距离左侧,距离上面

        /**可以用这个方法一次性设置

         * setBounds(int x,int y,int width,int height)移动组件并调整其大小。

         */

        Button b =new Button("按钮");

        Button b2 =new Button("按钮2");

        TextField tf =new TextField(20);

        f.add(b);//把按钮添加到窗体上

        f.add(b2);//把按钮添加到窗体上

        f.add(tf);//在窗体上的的顺序按照添加的顺序

       

        f.setLayout(new FlowLayout());//设置容器的布局管理器

        //f.addWindowListener(new MyWin());

       

        b.addActionListener(new ActionListener(){//通过匿名内部类,方便     添加动作监听器

 

            publicvoid actionPerformed(ActionEvent e) {

                System.out.println("按钮把界面关闭了");

                //System.exit(0);

            }

        });

       

        //鼠标

        b.addMouseListener(new MouseAdapter() {//鼠标动作监听器

            intcount = 1;

            publicvoid mouseEntered(MouseEvent e){

                System.out.println("鼠标进入"+(count++)+"次!");

            }

        });

       

        b.addMouseListener(new MouseAdapter(){//和上面的一样,可以写在一起

            intclickCount = 1;

            publicvoid mouseClicked(MouseEvent e){

                if(e.getClickCount() == 2){

                System.out.println("双击动作"+clickCount++);  

                }

            }

        });

       

        /*

        f.addWindowListener(new WindowAdapter()//匿名内部类的写法

        {

            public void windowClosing(WindowEvent e)

            {

                System.out.println("我关");

                System.exit(0);

            }

            public void windowActivated(WindowEvent e)

            {

                System.out.println("我活了。");

 

            }

           

            public void windowOpened(WindowEvent e)

            {

                System.out.println("我被打开了,hahahhahah");

            }

 

        });*/

       

        //键盘:

        b2.addKeyListener(new KeyAdapter() {

           

            publicvoid keyPressed(KeyEvent e)

            {

                System.out.println("键盘的作用");//用鼠标按没反应,

                System.out.println(e.getKeyChar()+"---"+e.getKeyCode());//f---70等、

                if(e.getKeyCode() == 27){//按住esc键退出

                    System.out.println("ESC键把我关闭了!");

                    System.exit(0);

                }

                //组合键去关闭 CTRL + ENTER

                if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER){

                    System.out.println("CTRL + ENTER组合键把我关闭了!");

                    System.exit(0);

                }

            }

        });

        //文本框

        tf.addKeyListener(new KeyAdapter() {

            publicvoid keyPressed(KeyEvent e){

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

                    System.out.println(e.getKeyChar()+"不符合是数字!");

                }

            }

        });

       

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

 

    }

 

}

 

例://列出文件夹内全部的文件

 

class MyFrame {

    private Frame f;

    private Button b;

    private TextField tf;

    private TextArea ta;

 

    MyFrame() {

        init();

    }

 

    void init() {

        f = new Frame("我的电脑");

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

        f.setLayout(new FlowLayout());

        b = new Button("转到");

        tf = new TextField(60);

        ta = new TextArea(25, 70);

 

        f.add(tf);

        f.add(b);

        f.add(ta);

        f.setVisible(true);

        action();

    }

 

    //窗体上的操作

    void action() {

        f.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

       

        buttonAction();

        keyAction();

    }

    void keyAction(){

        //设置键盘监听器,当输入enter键的时候实现和点击鼠标同样的功能!

        b.addKeyListener(new KeyAdapter() {

            public void keyPressed(KeyEvent e){

                //if(e.getKeyCode() == 10){

                    //buttonAction();

                //}

               

                String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

                File file = new File(dirPath);// 获取文件

                if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹

                    ta.setText("");// 如果符合条件的话,清空以前的数据;

                    String[] names = file.list();

                    for (String name : names) {

                        ta.append(name + "\r\n");

                    }

                    System.out.println("=======");

                } else {

                    ta.setText("");

                    ta.append("对不起,请确认您输入的是路径!");

                }

               

                System.out.println(e.getKeyCode());

            }

        });

       

        tf.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

                File file = new File(dirPath);// 获取文件

                if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹

                    ta.setText("");// 如果符合条件的话,清空以前的数据;

                    String[] names = file.list();

                    for (String name : names) {

                        ta.append(name + "\r\n");

                    }

                    System.out.println("=======");

                } else {

                    ta.setText("");

                    ta.append("对不起,请确认您输入的是路径!");

                }

            }

        });

    }

   

    void buttonAction() {

        b.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

                File file = new File(dirPath);// 获取文件

                if (file.exists() && file.isDirectory()) {// 判断,存在否以及是否是文件夹

                    ta.setText("");// 如果符合条件的话,清空以前的数据;

                    String[] names = file.list();

                    for (String name : names) {

                        ta.append(name + "\r\n");

                    }

                    System.out.println("=======");

                } else {

                    ta.setText("");

                    ta.append("对不起,请确认您输入的是路径!");

                }

            }

        });

    }

}

 

public class FrameDemo3 {

    public static void main(String[] args) {

        new MyFrame();

    }

}

4.键盘事件

(1)KeyListener包含


   KeyPressed(按下一瞬间的事件,表示虚拟键码即捕捉按键),能够调用e.getKeyCode()返回虚拟键码,

               e.isShiftDown()等检测是否按下  shift。


   KeyTyped(一直按着时的事件,表示在屏幕上出现的真实字符,如果按shift+a,则会为A),e.getKeyChar()返回真实字符


   KeyReleased(放开一瞬间的事件)


(2)panel默认是不接受键盘事件的,需要在panel构造函数最后加setFocusable(true);激活

5.鼠标事件

(1)鼠标事件有3个监听器


     MouseListener:有MousePressed(按下鼠标瞬间的事件),MouseReleased(松开鼠标瞬间的事件),

                    MouseClicked(主要是调用 e.getClickCount()获得鼠标点击次数)


     MouseMotionListener:MouseMoved(鼠标平常移动),MouseDragged(鼠标按下后移动)

 
     MouseWheelListener:MouseWheelMoved(鼠标滚轮移动)


(2)MouseEvent可以调用e.getX(),e.getY()返回鼠标的位置


(3)应用:实现画图板。

6.Action事件

(1)Action是扩展与ActionListener的接口,被AbstractAction实现。


(2)Action方法putValue(Strng key,Object value):这个方法可以在预先放置key-value对,由getValue(String key)获得
预定义的key中我认为最有用的也只有SHORT_DESCRIPTION,他的作用是当鼠标移到比如button上时,会显现一个简介,这就是SHORT_DESCRIPTION的作用。

7.菜单

继承体系

 

JMenuBar菜单栏    frame.setJMenuBar(menuBar);


JMenu 菜单对象     menuBar.add(menu);


JMenuItem菜单项   menu.add(menuItem);     JMenuItem可以添加图标  JMenuItem i=new JMenuItem(String,new ImageIcon("..."));


JCheckBoxMenuItem多选框菜单项   menuItem.add(checkboxmenuItem);

JRadioButtonMenuItem单选框菜单项  需要有ButtonGroup


JMenu m1;  JMenu m2;    m1.add(m2);可以添加子菜单


menu.addSeperator(); //添加分割线

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

ja
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值