ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

GUI编程-Java

2022-02-17 22:31:08  阅读:205  来源: 互联网

标签:Java 窗口 Frame Button 编程 frame new GUI Panel


GUI编程——Java(1)

GUI是什么?

  • 图形用户接口编程
  • 图形用户界面

核心技术有哪些?

  • AWT
  • Swing

组件

  • 窗口 frame
  • 面板 Panel
  • 弹窗 Dialog
  • 文本框 TextField
  • 列表框 List
  • 按钮 Button
  • 监听 ~Listion
  • 鼠标
  • 键盘
  • ...

能干啥?

  • 了解MVC架构中的监听

1.AWT(Abstract Windows tools)抽象窗口工具

1.1AWT简介

1.包括多种类和接口!放置于java.awt包中

2.基本元素:Frame Panel Dialog Button TextField TextArea Lable...

1.2组件和容器

1.Frame窗口

package com.Zm.AWT;

import java.awt.*;

public class Work02 {
    public static void main(String[] args) {
        //Frame窗口
        //第一步创建一个Frame对象
        Frame frame = new Frame("我的Frame");
        /* public Frame() throws HeadlessException {
                this("");//可传入参数表示title 显示在窗口的上面
            }//方法源码
        */

        //设置窗口的基本格式
        //1.设置窗口位置,窗口大小
        frame.setBounds(100,100,400,300);
        //2.设置窗口背景,传参为Color对象 使用RGB编码表示颜色,可设置透明度
        frame.setBackground(new Color(240, 120, 145));
        //3.显示窗口 setVisible默认为false表示不显示窗口
        frame.setVisible(true);

    }
}

经过上述代码可以创建出一个窗口,但是窗口不可以关闭也没有任何其他组件!

2.Panel面板

解决问题,窗口没有组件,添加基础组件Panel面板

package com.Zm.AWT;

import java.awt.*;

public class Work02 {
    public static void main(String[] args) {
        //Frame窗口
        //第一步创建一个Frame对象
        Frame frame = new Frame("我的Frame");
        /* public Frame() throws HeadlessException {
                this("");//可传入参数表示title 显示在窗口的上面
            }//方法源码
        */

        //设置窗口的基本格式
        //1.设置窗口位置,窗口大小
        frame.setBounds(100,100,400,300);
        //2.设置窗口背景,传参为Color对象 使用RGB编码表示颜色,可设置透明度
        frame.setBackground(new Color(240, 120, 145));
        //3.设置布局
        frame.setLayout(null);

        //添加面板Panel
        //创建Panel对象
        Panel panel = new Panel();
        /*  public Panel() {
               this(new FlowLayout()); //方法源码,Panel默认属性有一个布局为FlowLayout流水式布局
            }
        * */

        //设置Panel基本格式,同Frame,位置相对于Frame
        panel.setBounds(100,50,100,100);
        panel.setBackground(new Color(244, 176, 49));

        //添加Panel到Frame中
        frame.add(panel);
        

        //4.显示窗口 setVisible默认为false表示不显示窗口
        frame.setVisible(true);
    }
}

添加基础组件Panel后可以显示一个Panel在窗口上,Panel相当于一个容器,当要对窗口进行复杂布局时都是对多个Panel进行布局组合而成,Panel不可或缺。

3.布局管理器

布局是对Frame窗口和Panel都有的一种设置,包括三种基础布局:流式布局,东南西北中布局,表格布局。

还有一种绝对布局,即null,也就通过分析绝对位置进行放置的一种布局格式

3.1流式布局
package com.ZM.lesson1;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestFlowLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("流式布局");

        //设置一组按钮
        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");

        //设置流式布局
        frame.setLayout(new FlowLayout());//默认布局
        //frame.setLayout(new FlowLayout(FlowLayout.LEFT));//布局在左
        //frame.setLayout(new FlowLayout(FlowLayout.RIGHT));//布局在右

        //设置弹窗的位置和大小(设在中间)
        frame.setBounds(500,100,500,500);
        //设置窗口颜色
        frame.setBackground(new Color(35, 195, 182));
        //添加按钮
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);

        frame.setVisible(true);
    }
}
3.2东南西北中布局
package com.ZM.lesson1;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestBorderLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("东西南北中");

        Button east = new Button("east");
        Button west = new Button("west");
        Button south = new Button("south");
        Button north = new Button("north");
        Button center = new Button("center");

        //设置弹窗的位置和大小(设在中间)
        frame.setBounds(500,100,500,500);
        //设置窗口颜色
        frame.setBackground(new Color(35, 80, 195));
        frame.add(east,BorderLayout.EAST);
        frame.add(west,BorderLayout.WEST);
        frame.add(south,BorderLayout.SOUTH);
        frame.add(north,BorderLayout.NORTH);
        frame.add(center,BorderLayout.CENTER);

        frame.setVisible(true);

    }
}
3.3表格布局
package com.ZM.lesson1;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestGridLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("表格");

        Button btn1 = new Button("btn1");
        Button btn2 = new Button("btn2");
        Button btn3 = new Button("btn3");
        Button btn4 = new Button("btn4");
        Button btn5 = new Button("btn5");
        Button btn6 = new Button("btn6");

        //设置弹窗的位置和大小(设在中间)
        frame.setBounds(500,100,500,500);
        //设置表格--->三行两列
        frame.setLayout(new GridLayout(2,3));

        frame.add(btn1);
        frame.add(btn2);
        frame.add(btn3);
        frame.add(btn4);
        frame.add(btn5);
        frame.add(btn6);
        
        frame.setVisible(true);
    }
}

4.监听事件

窗口到现在为止都没有关闭功能,需要将窗口正常关闭就需要监听事件,监听事件又可以针对窗口Frame,鼠标Mouse,键盘Key...

 //加入一个按钮的监听事件
        Button button = new Button("1");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(e.getActionCommand());
            }
        });
        panel.add(button);

  //添加鼠标监听事件 使用适配器方式而不是全写Listener中的全部方法
        frame.addMouseListener(new MouseAdapter() {
            /**
             * {@inheritDoc}
             *
             * @param e
             */
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                System.out.println("Mouse Clicked");
            }
        });

 //添加键盘监听事件
        panel.addKeyListener(new KeyAdapter() {
            /**
             * Invoked when a key has been pressed.
             *
             * @param e
             */
            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println(e.getKeyChar());
            }
        });

 //添加关闭窗口的监听事件 使用适配器方式而不是全写WindowsListener中的全部方法
        frame.addWindowListener(new WindowAdapter() {
            /**
             * Invoked when a window is in the process of being closed.
             * The close operation can be overridden at this point.
             *
             * @param e
             */
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });

自此,监听事件完成,窗口可以正常关闭,还有其他窗口监听事件,鼠标监听事件等等,不一一赘述。

标签:Java,窗口,Frame,Button,编程,frame,new,GUI,Panel
来源: https://www.cnblogs.com/ixiaowang/p/15906697.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有