GUI编程自学,编写自己的计算器!
GUI编程如何自学?
组建
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标事件
- 外挂
- 破解工具
1:简介
Gui的核心技术:Swing AWT
- MVC基础,了解监听器
- 可以写小工具
- 可以维护swing界面
2:AWT
2.1:AWT介绍
- 包含很多类和接口
- 元素:窗口,按钮,文本框
- 组件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);}});}}
总结:
- frame是个顶级窗口
- panel无法单独显示,只能添加到某个容器中
- 布局管理:流式,东西南北中,表格
- 大小,定位,背景颜色,可见性,监听(关闭窗口)
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编程自学,编写自己的计算器!相关推荐
- java 对话框计算器,《Java程序设计》第16周礼拜四:GUI编程及文件对话框的使用 计算器...
<Java程序设计>第16周周四:GUI编程及文件对话框的使用 计算器 项目三:实验六 图形用户界面(教材P279-280) 目标:完成实验六的内容. 运行代码 import java.a ...
- java gui编程 计算器_Matlab-GUI编程:简单计算器的实现
前言:任何编程语言到了GUI这一块都逃不了要模仿做一个计算器来证明已经入门了.上个学期学java的时候GUI着实不好整,一个计算器硬是没整出来.这学期接触了matlab,虽然他号称是面向对象的编程语言 ...
- 编写用switch语句编程设计一个简单的计算器程序
编程要求 根据提示,在右侧编辑器补充代码.要求用switch语句编程设计一个简单的计算器程序.要求根据用户从键盘输入的表达式. 操作数1 运算符op 操作数2 计算表达式的值.指定的算术运算符为加(+ ...
- Java基础学习总结(23)——GUI编程
2019独角兽企业重金招聘Python工程师标准>>> 一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Compo ...
- Matlab GUI/APP 浅谈(附计算器源码)
Matlab GUI/APP 浅谈(附计算器源码) 今天没有什么段子,也没有心灵鸡汤.毒鸡汤啥的,纯粹聊一聊这些年从有关MATLAB GUI/APP开发中悟出的一点道理,顺便把计算器的源代码给大家. ...
- Python GUI编程:将自己写的postman打包成exe可执行文件
通过前面几个章节的文章,我们学会了通过PySide2去编写一个简单的GUI页面测试小工具: Python GUI编程:PySide2介绍 Python GUI编程:如何运行第一个PySide2的窗体程 ...
- 「JavaSE」- GUI编程
GUI 编程 Swing和AWT 是java开发GUI常用的技术,但是由于外观不太美观, 组件数量偏少, 并且运行需要JRE环境(动不动就上百M的JRE包....), 所以没有流行起来.但是 ,建议简 ...
- Java:GUI编程
文章目录 GUI编程 AWT 一.AWT介绍 二.组件和容器(Component和Container) 2.1.Frame 2.2.Panel 三.布局管理器 3.1.第一种布局管理器--FlowLa ...
- 零基础入门学习Python(33)-图形用户界面编程(GUI编程)EasyGui
用户界面编程,即平时说的GUI(Graphical User Interface)编程,那些带有按钮.文本.输入框的窗口的编程 EasyGui是一个非常简单的GUI模块,一旦导入EasyGui模块,P ...
最新文章
- Git中.gitignore文件的使用
- RDS For MySQL常见连接问题总结
- Vi编辑器的使用方法
- Qt笔记-AES加密
- matlab接口编程配置,MATLAB与外部程序接口编程
- 有没有计算机用户号,刚做的系统怎么有账户-用户帐号系统设计的原则有哪些?...
- CRM客户关系管理系统商业项目视频课程-赖国荣-专题视频课程
- html5用户注册页面代码,HTML5注册页面示例代码
- Php 生成随机字符串函数集成
- 分布式电商项目——10.商品搜索 springboot 集成ES+kibana+logstash+Ik分词器+Ik拼音分词器
- iOS base64解码失败
- PHP将PPT文件转成图片
- DailyTopic_4/16 B站:最有YouTube气质的视频网站
- html 5 flash 播放器开发
- 解决Ubuntu 键盘输入一直大写的问题
- vue系列教程之微商城项目|项目介绍
- vue 网页滚动到指定位置显示动画效果
- JAVA常用遍历替换数据
- 计算机四级嵌入式知识点——《计算机组成与接口》
- 金融计算与编程 基于matlab,金融计算与编程.pdf