GUI编程如何自学?

组建

  • 窗口
  • 弹窗
  • 面板
  • 文本框
  • 列表框
  • 按钮
  • 图片
  • 监听事件
  • 鼠标事件
  • 外挂
  • 破解工具

1:简介

Gui的核心技术:Swing AWT

  1. MVC基础,了解监听器
  2. 可以写小工具
  3. 可以维护swing界面

2:AWT

2.1:AWT介绍

  1. 包含很多类和接口
  2. 元素:窗口,按钮,文本框
  3. 组件Componet:

2.2组件和容器

1:Frame

GUI第一个界面

package com.lg.study01;
import java.awt.*;//Gui的第一个界面
public class TestFrame {public static void main(String[] args) {//FrameFrame frame = new Frame("我的第一个Java图像界面窗口");//设置可见性frame.setVisible(true);//设置窗口大小w,hframe.setSize(400,400);//设置背景颜色frame.setBackground(new Color(239, 39, 55));//弹出窗口的坐标frame.setLocation(200,200);//设置大小固定frame.setResizable(false);}
}

问题:窗口关闭不了,只能停止Java


回顾封装,一次弹出多个窗口

package com.lg.study01;import java.awt.*;public class TestFrame2 {public static void main(String[] args) {MyFrame frame1= new MyFrame(100,100,200,200,Color.blue);MyFrame frame2=new MyFrame(100,300,200,200,Color.black);MyFrame frame3= new MyFrame(300,100,200,200,Color.green);MyFrame frame4= new MyFrame(300,300,200,200,Color.red);}
}
class MyFrame extends Frame{static int id = 0;//可能存在多个窗口public MyFrame(int x,int y,int w,int h,Color color){super("MyFrame"+(++id));setBackground(color);setBounds(x,y,w,h);setVisible(true);setResizable(false);}}

2:面板Panel

Panel可以看成一个空间,但是不能单独存在。

解决了窗口关闭问题(监听关闭)

package com.lg.study01;import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;//Panel
public class TestPanel {public static void main(String[] args) {//创建一个窗口Frame frame=new Frame();//创建两个面板Panel panel = new Panel();Panel panel1 = new Panel();//Panel坐标,相对于framepanel.setBounds(10,10,100,100);panel.setBackground( new Color(200,2,3));panel1.setBounds(100,10,100,100);panel1.setBackground( new Color(200,100,3));//设置布局frame.setLayout(null);//frame设置可见性、frame.setVisible(true);//frame坐标frame.setBounds(300,300,500,500);//frame颜色frame.setBackground(Color.white);//frame添加Panelframe.add(panel);frame.add(panel1);//frame的监听事件,窗口关闭监听frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {//结束程序System.exit(0);}});}
}

3.布局管理

  • 流式布局

    package com.lg.study01;import java.awt.*;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("button2");//设置frame的布局Layout// frame.setLayout( new FlowLayout());frame.setLayout( new FlowLayout(FlowLayout.LEFT));frame.setVisible(true);frame.setSize(200,200);//把按钮添加到frame中去frame.add(button1);frame.add(button2);frame.add(button3);}
    }
    
  • 东南西北中布局

    package com.lg.study01;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.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);frame.setSize(200, 200);//设置窗口为可关闭frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }
  • 表格布局

    package com.lg.study01;import javax.swing.*;
    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("TestGridLayout");Button button = new Button("btn1");Button button1 = new Button("btn2");Button button2 = new Button("btn3");Button button3 = new Button("btn4");Button button4 = new Button("btn5");Button button5 = new Button("btn6");frame.setLayout(new GridLayout(3,2));frame.add(button);frame.add(button1);frame.add(button2);frame.add(button3);frame.add(button4);frame.add(button5);frame.setVisible(true);frame.pack();//设置窗口为可关闭frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}}

总结:

  1. frame是个顶级窗口
  2. panel无法单独显示,只能添加到某个容器中
  3. 布局管理:流式,东西南北中,表格
  4. 大小,定位,背景颜色,可见性,监听(关闭窗口)

4:事件监听

package com.lg.study02;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestAction {public static void main(String[] args) {//按下按钮,触发事件Frame frame = new Frame();Button button = new Button("触发按钮");//因为,addActionListener()需要一个ActionListener,所以我们构造一个ActionListenerMyActionListener myActionListener = new MyActionListener();button.addActionListener(myActionListener);frame.add(button,BorderLayout.WEST);frame.setVisible(true);frame.setBounds(100,100,500,700);//调用关闭窗口的方法windowClose(frame);}//关闭窗户口事件public static void windowClose(Frame frame){//设置窗口为可关闭frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}
//事件监听class MyActionListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("按按钮后触发");}
}

按按钮后执行触发:


5:输入框TextField

package com.lg.study02;
import java.awt.*;
import java.awt.event.*;
public class TestTex01 {public static void main(String[] args) {//启动new MyFrame();}
}
class MyFrame extends Frame {public MyFrame (){TextField textField =new TextField();add(textField);//监听这个文本输入的文字MyActionListener1 myActionListener1 = new MyActionListener1();//按enter 就会触发这个输入框的事件textField.addActionListener(myActionListener1);setVisible(true);pack();//设置替换编码textField.setEchoChar('*');//窗口关闭windowClose1();}public void windowClose1(){addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}class MyActionListener1 implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {TextField textField = (TextField) e.getSource();System.out.println(textField.getText());textField.setText("");}
}

6:画笔

package com.lg.study03;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class Paint {public static void main(String[] args) {MyPaint myPaint = new MyPaint();myPaint.loadFrame();myPaint.windowClose1();}
}
class MyPaint extends Frame{@Overridepublic void paint(Graphics g) {g.setColor(Color.red);g.drawOval(300,100,100,100);g.fillOval(100,100,100,100);}public void loadFrame(){setBounds(200,200,600,500);setVisible(true);}public void windowClose1() {addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}}

7:鼠标监听

目的:实现鼠标点击画画

package com.lg.study03;import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;public class TestMouseListener {public static void main(String[] args) {MyFrame myFrame=  new MyFrame("画图");}
}
//窗口类
class MyFrame extends Frame {ArrayList points;public MyFrame(String title){super(title);setVisible(true);setBounds(200,400,500,400);points = new ArrayList<>();this.addMouseListener(new MyMouseListener());}@Overridepublic void paint(Graphics g) {Iterator iterator = points.iterator();while(iterator.hasNext()){Point point = (Point) iterator.next();g.setColor(Color.red);g.fillOval(point.x,point.y,10,10);}}public void addPaint(Point point) {points.add(point);}}
//适配器模式class MyMouseListener extends MouseAdapter {@Overridepublic void mousePressed(MouseEvent e) {MyFrame frame = (MyFrame) e.getSource();frame.addPaint(new Point(e.getX(),e.getY()));frame.repaint();}
}

8:窗口监听

窗口激活和关闭

9:键盘监听

package com.lg.study04;import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;public class TestKeyListener {public static void main(String[] args) {KeyFrame keyFrame = new KeyFrame();}
}
class KeyFrame extends Frame {public KeyFrame()  {setBounds(100,100,500,500);setVisible(true);this.addKeyListener(new KeyAdapter() {//获取按压方法@Overridepublic void keyPressed(KeyEvent e) {//获取当前键盘的码int keyCode= e.getKeyCode();if(keyCode==KeyEvent.VK_UP){      System.out.println("你按下了上键");}}});}
}

3:Swing

1:窗口,面板

标签居中,设置容器颜色

package com.lg.study05;import javax.swing.*;
import java.awt.*;public class JFrame01 {//init初始化public void init(){JFrame jFrame = new JFrame("这是一个JFrame窗口");jFrame.setVisible(true);jFrame.setBounds(100,100,200,500);jFrame.setBackground(Color.red);//设置文字JLabel jLabel= new JLabel("欢迎来到贪吃蛇");jFrame.add(jLabel);jLabel.setHorizontalAlignment(SwingConstants.CENTER);//容器jFrame.getContentPane().setBackground(Color.yellow);//关闭事件jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {//建立一个JFrame窗口JFrame01 jFrame01 =  new JFrame01();//调用init方法jFrame01.init();}
}

2:弹窗

package com.lg.study05;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.sql.Connection;//主窗口
public class Dialog  extends JFrame {public Dialog(){this.setVisible(true);this.setBounds(100,100,600,500);//JFrame容器Container container=this.getContentPane();//绝对布局container.setLayout(null);//按钮JButton jButton=new JButton("点击弹出对话框");jButton.setBounds(20,20,200,200);//容器添加按钮container.add(jButton);//点击按钮弹出对话框jButton.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {//调用弹出类new MyDialog();}});}public static void main(String[] args) {new Dialog();}
}//弹窗
class MyDialog extends JDialog{public MyDialog() {//设置弹窗可见this.setVisible(true);this.setBounds(500,500,300,200);//设置容器Container container1 =this.getContentPane();container1.setLayout(null);//设置文本Label label=  new Label("欢迎到弹窗");container1.add(label);}
}

3:标签

Label

图标ICON

4:面板

JPanel

package com.lg.study06;import javax.swing.*;
import java.awt.*;public class JPanel01 extends JFrame {public JPanel01(){Container container = this.getContentPane();container.setLayout(new GridLayout(2, 1, 10, 10));JPanel jPanel = new JPanel(new GridLayout(1,3));jPanel.add(new JButton("1"));jPanel.add(new JButton("1"));jPanel.add(new JButton("1"));container.add(jPanel);this.setVisible(true);this.setSize(500, 500);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JPanel01();}
}

JScroll:

package com.lg.study06;
import javax.swing.*;
import java.awt.*;public class JScrollDemo  extends JFrame {public JScrollDemo() {Container container = this.getContentPane();//文本域JTextArea jTextArea = new JTextArea(20, 50);jTextArea.setText("hello");//Scroll面板JScrollPane jScrollPane = new JScrollPane(jTextArea);container.add(jScrollPane);//窗口设置this.setVisible(true);this.setBounds(100,100,300,500);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JScrollDemo();}
}

5:按钮

图片按钮

package com.lg.study06;import javax.swing.*;
import java.awt.*;
import java.net.URL;public class JButtonDemo01 extends JFrame {public JButtonDemo01() {//获得容器Container container = this.getContentPane();//将图片变为图标Icon icon = new ImageIcon("D:\\project.java.study\\GUI\\src\\com\\lg\\study06\\lol.png");//把图标放在按钮上JButton jButton = new JButton();jButton.setIcon(icon);jButton.setToolTipText("这是个图片按钮");//把按钮放在容器里container.add(jButton);this.setVisible(true);this.setSize(500, 600);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JButtonDemo01();}
}

单选按钮:

package com.lg.study06;
import javax.swing.*;
import java.awt.*;
public class JButtonDemo01 extends JFrame {public JButtonDemo01() {//获得容器Container container = this.getContentPane();//单选框JRadioButton r1 = new JRadioButton("20岁");JRadioButton r2 = new JRadioButton("30岁");JRadioButton r3 = new JRadioButton("18岁");//分在一组中ButtonGroup buttonGroup = new ButtonGroup();buttonGroup.add(r1);buttonGroup.add(r2);buttonGroup.add(r3);//添加到容器中container.add(r1,BorderLayout.NORTH);container.add(r2,BorderLayout.SOUTH);container.add(r3,BorderLayout.CENTER);this.setVisible(true);this.setSize(500, 600);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JButtonDemo01();}
}

复选按钮:

package com.lg.study06;
import javax.swing.*;
import java.awt.*;
public class JButtonDemo01 extends JFrame {public JButtonDemo01() {//获得容器Container container = this.getContentPane();//复选框JCheckBox jCheckBox1 = new JCheckBox("喜欢Java");JCheckBox jCheckBox2 = new JCheckBox("喜欢编程");container.add(jCheckBox1,BorderLayout.NORTH);container.add(jCheckBox2,BorderLayout.SOUTH);this.setVisible(true);this.setSize(500, 600);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JButtonDemo01();}
}

6:列表

下拉框:

package com.lg.study06;
import javax.swing.*;
import java.awt.*;
public class JButtonDemo01 extends JFrame {public JButtonDemo01() {//获得容器Container container = this.getContentPane();JComboBox jComboBox = new JComboBox();jComboBox.addItem(null);jComboBox.addItem("电影");jComboBox.addItem("电视剧");container.add(jComboBox);this.setVisible(true);this.setSize(500, 350);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JButtonDemo01();}
}

列表框:

package com.lg.study06;
import javax.swing.*;
import java.awt.*;
public class JButtonDemo01 extends JFrame {public JButtonDemo01() {//获得容器Container container = this.getContentPane();String[] cons = {"1","2","3"};JList jList = new JList(cons);container.add(jList);this.setVisible(true);this.setSize(500, 350);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JButtonDemo01();}
}

7:文本框

package com.lg.study06;
import javax.swing.*;
import java.awt.*;
public class JButtonDemo01 extends JFrame {public JButtonDemo01() {//获得容器Container container = this.getContentPane();
container.setLayout(null);JTextField jTextField = new JTextField("hello");JTextField jTextField1 = new JTextField("word",100);container.add(jTextField);container.add(jTextField1);jTextField1.setBounds(200, 200,100,90 );jTextField.setBounds(100, 200,100,90 );this.setVisible(true);this.setSize(500, 350);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new JButtonDemo01();}
}**## 实践作业:**
***编写一个计算器,实现简单的界面,加减乘除,平方,开方的功能***

GUI编程自学,编写自己的计算器!相关推荐

  1. java 对话框计算器,《Java程序设计》第16周礼拜四:GUI编程及文件对话框的使用 计算器...

    <Java程序设计>第16周周四:GUI编程及文件对话框的使用 计算器 项目三:实验六 图形用户界面(教材P279-280) 目标:完成实验六的内容. 运行代码 import java.a ...

  2. java gui编程 计算器_Matlab-GUI编程:简单计算器的实现

    前言:任何编程语言到了GUI这一块都逃不了要模仿做一个计算器来证明已经入门了.上个学期学java的时候GUI着实不好整,一个计算器硬是没整出来.这学期接触了matlab,虽然他号称是面向对象的编程语言 ...

  3. 编写用switch语句编程设计一个简单的计算器程序

    编程要求 根据提示,在右侧编辑器补充代码.要求用switch语句编程设计一个简单的计算器程序.要求根据用户从键盘输入的表达式. 操作数1 运算符op 操作数2 计算表达式的值.指定的算术运算符为加(+ ...

  4. Java基础学习总结(23)——GUI编程

    2019独角兽企业重金招聘Python工程师标准>>> 一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Compo ...

  5. Matlab GUI/APP 浅谈(附计算器源码)

    Matlab GUI/APP 浅谈(附计算器源码) 今天没有什么段子,也没有心灵鸡汤.毒鸡汤啥的,纯粹聊一聊这些年从有关MATLAB GUI/APP开发中悟出的一点道理,顺便把计算器的源代码给大家. ...

  6. Python GUI编程:将自己写的postman打包成exe可执行文件

    通过前面几个章节的文章,我们学会了通过PySide2去编写一个简单的GUI页面测试小工具: Python GUI编程:PySide2介绍 Python GUI编程:如何运行第一个PySide2的窗体程 ...

  7. 「JavaSE」- GUI编程

    GUI 编程 Swing和AWT 是java开发GUI常用的技术,但是由于外观不太美观, 组件数量偏少, 并且运行需要JRE环境(动不动就上百M的JRE包....), 所以没有流行起来.但是 ,建议简 ...

  8. Java:GUI编程

    文章目录 GUI编程 AWT 一.AWT介绍 二.组件和容器(Component和Container) 2.1.Frame 2.2.Panel 三.布局管理器 3.1.第一种布局管理器--FlowLa ...

  9. 零基础入门学习Python(33)-图形用户界面编程(GUI编程)EasyGui

    用户界面编程,即平时说的GUI(Graphical User Interface)编程,那些带有按钮.文本.输入框的窗口的编程 EasyGui是一个非常简单的GUI模块,一旦导入EasyGui模块,P ...

最新文章

  1. Git中.gitignore文件的使用
  2. RDS For MySQL常见连接问题总结
  3. Vi编辑器的使用方法
  4. Qt笔记-AES加密
  5. matlab接口编程配置,MATLAB与外部程序接口编程
  6. 有没有计算机用户号,刚做的系统怎么有账户-用户帐号系统设计的原则有哪些?...
  7. CRM客户关系管理系统商业项目视频课程-赖国荣-专题视频课程
  8. html5用户注册页面代码,HTML5注册页面示例代码
  9. Php 生成随机字符串函数集成
  10. 分布式电商项目——10.商品搜索 springboot 集成ES+kibana+logstash+Ik分词器+Ik拼音分词器
  11. iOS base64解码失败
  12. PHP将PPT文件转成图片
  13. DailyTopic_4/16 B站:最有YouTube气质的视频网站
  14. html 5 flash 播放器开发
  15. 解决Ubuntu 键盘输入一直大写的问题
  16. vue系列教程之微商城项目|项目介绍
  17. vue 网页滚动到指定位置显示动画效果
  18. JAVA常用遍历替换数据
  19. 计算机四级嵌入式知识点——《计算机组成与接口》
  20. 金融计算与编程 基于matlab,金融计算与编程.pdf

热门文章

  1. 在 Linux 终端中自定义 Bash 配色和提示内容
  2. DOTA双功能螯合剂127985-74-4,p-SCN-Bn-DOTA,实验室科研试剂
  3. Netty空闲检测之读空闲
  4. 这么多处理器(CPU/SOC)牌子,到底哪家强
  5. html表格字符分散,如何实现Word表格文字分散对齐?
  6. 来自于游戏开发萌新的上路分享
  7. 2023年开工第一天
  8. git进阶 | 01 - git基础操作进阶
  9. WordPress相关二次开发教程篇,简单易学
  10. TP6基础知识【新框架】