GUI编程

核心技术

AWT

画笔

package com.tmy.lesson03;import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestPaint01 {public static void main(String[] args) {new MyPaint().loadFrame();}
}
class MyPaint extends Frame{public void loadFrame(){setBounds(500,300,600,450);//setBackground(new Color(247, 246, 235));//setResizable(true);setVisible(true);//监听事件,关闭窗口addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}//画笔@Overridepublic void paint(Graphics g) {g.setColor(Color.red);g.drawOval(100, 100, 100, 100);//空心圆g.fillOval(200,200,100,100);//实心圆//画笔用完,将他还原到最初颜色g.setColor(Color.black);}}

结果:

鼠标监听(模拟画图工具)

package com.tmy.lesson03;import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;public class TestMouseListener {public static void main(String[] args) {new MyMouseListener("画图");}
}
class MyMouseListener extends Frame{//需要画笔,需要监听鼠标当前位置,需要一个集合来存储这个点ArrayList points = null;public MyMouseListener(String title){super(title);setBounds(500,300,600,400);setBackground(Color.white);setVisible(true);//存鼠标的点points = new ArrayList();//鼠标监听事件addMouseListener(new MyMouse());addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}@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);}}//添加一个点到ArrayList集合的方法public void addPaint(Point point){points.add(point);}//适配器模式(不需要重写MouseListener的所有方法,只重写需要的)private class MyMouse extends MouseAdapter{//鼠标按下@Overridepublic void mousePressed(MouseEvent e) {MyMouseListener frame = (MyMouseListener)e.getSource();//我们点击的时候,就会在界面上产生一个点//这个点就是鼠标的点frame.addPaint(new Point(e.getX(),e.getY()));//添加点到ArrayList集合//每次点击都会重新画一遍frame.repaint();//类似于刷新}}}

结果:

窗口监听

package com.tmy.lesson03;import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestWindow {public static void main(String[] args) {new WindowFrame();}
}
class WindowFrame extends Frame{public WindowFrame(){setBounds(500,300,400,300);setBackground(Color.RED);setVisible(true);addWindowListener(new WindowAdapter(){ //匿名内部类//窗口关闭// @Overridepublic void windowClosing(WindowEvent e) {System.out.println("窗口关闭");//System.exit(0);}//窗口激活@Overridepublic void windowActivated(WindowEvent e) {System.out.println("窗口被激活");}});}//内部类的方法/* class MyWindow extends WindowAdapter{@Overridepublic void windowClosing(WindowEvent e) {System.out.println("窗口关闭");System.exit(0);}@Overridepublic void windowActivated(WindowEvent e) {System.out.println("窗口被激活");}}*/
}

结果:

键盘监听

package com.tmy.lesson03;import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestKeyListener {public static void main(String[] args) {new MyKey();}
}
class MyKey extends Frame{public MyKey(){setBackground(Color.RED);setBounds(500,300,400,200);setVisible(true);addKeyListener(new KeyAdapter() {//按下键盘按键@Overridepublic void keyPressed(KeyEvent e) {//获得你当前按下的按键对应的码int keyCode = e.getKeyCode();//按键对应的码值不需要去记忆,只需要使用静态属性 KeyEvent.VK_xxxchar keyChar = e.getKeyChar();System.out.println(keyChar + "说:你特么别按我知道不???");if(keyCode==KeyEvent.VK_W){System.out.println("你按w干嘛?");}}});addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eVSi4Xiq-1592671903585)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200620114904803.png)]

Swing

JFrame窗体

package com.tmy.lesson04;import javax.swing.*;
import java.awt.*;public class TestJFrame01 {public static void main(String[] args) {//新建一个窗口new TestJFrame01().init();}//init();初始化public void init(){JFrame jFrame = new JFrame("这是一个JFrame窗口");jFrame.setBounds(500,300,500,300);jFrame.setBackground(new Color(201, 55, 58));、//占时不知这里设置有什么,测试结果这里控制不了背景的颜色jFrame.setVisible(true);//设置文字JLabel label = new JLabel();label.setText("Hello World!!");jFrame.add(label);//设置标签居中label.setHorizontalAlignment(SwingConstants.CENTER);//容器实例化,显示背景颜色Container contentPane = jFrame.getContentPane();contentPane.setBackground(new Color(201, 55, 58));//关闭事件jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZndfTGd-1592671903588)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200620150318319.png)]

弹窗

package com.tmy.lesson04;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;//JDialog,用来被弹出,默认就有关闭事件public class TestDialog {public static void main(String[] args) {new MyTestDialog();}
}//创建计窗口类
class MyTestDialog extends JFrame{public MyTestDialog(){setTitle("学习弹窗");setBounds(500,300,600,300);setVisible(true);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//创建按钮JButton jButton = new JButton("点击有惊喜");//添加按钮,首先得或得容器Container contentPane = getContentPane();//布局。绝对布局jButton.setBounds(200,100,200,60);contentPane.setLayout(null);//绝对布局,按照添加元素自己设定的参数布局//添加进窗口contentPane.add(jButton);//添加事件监听jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new MyDialog();}});}
}//创建弹窗,并设置弹窗
class MyDialog extends JDialog{public MyDialog() {this.setVisible(true);this.setBounds(100,100,300,200);//this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//自带不需要再次设置Container contentPane = this.getContentPane();contentPane.setLayout(null);JButton jButton = new JButton("草你大爷");contentPane.setLayout(null);jButton.setBounds(100,50,100,50);contentPane.add(jButton);}
}

结果:

标签

  • 普通标签
package com.tmy.lesson04;import javax.swing.*;
import java.awt.*;//图标需要实现类,JFrame继承
public class TestIcon extends JFrame implements Icon {private int height;private int width;public TestIcon() {}public TestIcon(int height,int width) {this.height = height;this.width = width;}public void init(){TestIcon icon = new TestIcon(15, 15);//图标可以放到标签上,也可以防止按钮上JLabel label = new JLabel("Icon",icon,SwingConstants.CENTER);//JButton jButton = new JButton(icon);//可以防止按钮上Container contentPane = this.getContentPane();contentPane.add(label);contentPane.setBackground(new Color(29, 199, 46));setBounds(500,300,400,200);setVisible(true);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new TestIcon().init();}@Overridepublic void paintIcon(Component c, Graphics g, int x, int y) {g.fillOval(x,y,width,height);}@Overridepublic int getIconWidth() {return this.width;}@Overridepublic int getIconHeight() {return this.height;}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xq1OB7rW-1592671903590)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200620171141942.png)]

  • 图片标签
package com.tmy.lesson04;import javax.swing.*;
import java.awt.*;
import java.net.URL;//将图片作为图标加到窗口public class TestImageIcon extends JFrame {public TestImageIcon() {JLabel jLabel = new JLabel("ImageIcon");JButton jButton = new JButton("百度翻译");//获取图片地址URL url = TestImageIcon.class.getResource("baidu.jpg");//获取TestImageIcon这个类的同级资源//System.out.println(url);//获取图片路径的方法(之前反射机制的方法)URL url1 = Thread.currentThread().getContextClassLoader().getResource("com/tmy/lesson04/baidu.jpg");//System.out.println(url1);//创建图片标签,将地址传到图片标签中ImageIcon imageIcon = new ImageIcon(url);//将图标加到按钮上jButton.setIcon(imageIcon);//将图标加到标签上jLabel.setIcon(imageIcon);jLabel.setHorizontalAlignment(SwingConstants.CENTER);//设置水平居中//获得窗口的容器Container contentPane = getContentPane();//将按钮加到窗口的容器中contentPane.add(jButton);//将标签加到窗口的容器中//contentPane.add(jButton);contentPane.setBackground(new Color(172, 153, 60));setBounds(500,300,500,300);setVisible(true);//设置监听关闭setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new TestImageIcon();}
}

加载到的标签结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1YbFFk9-1592671903592)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200620181902502.png)]

加载到的按钮结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vD36AyGH-1592671903593)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200620182629973.png)]

面板

package com.tmy.lesson04;import javax.swing.*;
import java.awt.*;public class TestJPanel extends JFrame {public TestJPanel() {setLayout(new GridLayout(2,2,10,10));//后面的10表示两个添加物的间距setBounds(500,300,600,400);Container contentPane = getContentPane();JPanel jPanel1 = new JPanel(new GridLayout(2,3));//表格布局JPanel jPanel2 = new JPanel(new FlowLayout());//流式布局JPanel jPanel3 = new JPanel();jPanel3.setLayout(null);//绝对布局JPanel jPanel4= new JPanel(new BorderLayout());//东南西北中布局for (int i = 0; i < 6; i++) {jPanel1.add(new JButton(""+i));}for (int i = 0; i < 8; i++) {jPanel2.add(new JButton(""+i));}jPanel3.setBackground(Color.RED);JButton jButton0 = new JButton("0");jButton0.setBounds(60,70,70,40);JButton jButton1 = new JButton("1");jButton1.setBounds(150,70,70,40);jPanel3.add(jButton0);jPanel3.add(jButton1);jPanel4.add(new JButton("上"), BorderLayout.SOUTH);jPanel4.add(new JButton("下"), BorderLayout.NORTH);jPanel4.add(new JButton("右"), BorderLayout.EAST);jPanel4.add(new JButton("左"), BorderLayout.WEST);jPanel4.add(new JButton("中"), BorderLayout.CENTER);contentPane.add(jPanel1);contentPane.add(jPanel2);contentPane.add(jPanel3);contentPane.add(jPanel4);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new TestJPanel();}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vjXBRonX-1592671903595)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200620225520514.png)]

Scroll面板(滚动面板)

package com.tmy.lesson04;import javax.swing.*;
import java.awt.*;//滚动面板
public class TestJScrollPanel extends JFrame {public TestJScrollPanel() {setBounds(500,300,600,400);setResizable(false);//窗口不可改变大小setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//获得内容窗格Container contentPane = getContentPane();// 文本域   创建一个可以换行的文本域JTextArea textArea = new JTextArea(200,500);//设置文本域的长宽textArea.setText("速度快点啊");//创建滚动窗格   Scroll面板JScrollPane jScrollPane = new JScrollPane(textArea);//创建滚动窗格,并且将文本域添加到里面//将滚动窗格添加到内容窗格(窗口)中contentPane.add(jScrollPane);setVisible(true);}public static void main(String[] args) {new TestJScrollPanel();}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4LQgJ4uw-1592671903597)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200620233004738.png)]

按钮

图片按钮
package com.tmy.lesson05;import javax.swing.*;
import java.awt.*;
import java.net.URL;public class TestJButton extends JFrame {public TestJButton() {Container contentPane = getContentPane();//两种获得路径的方法URL url1 = TestJButton.class.getResource("baidu.jpg");//只能获得当前类路径同级的文件URL url2 = Thread.currentThread().getContextClassLoader().getResource("com/tmy/lesson05/baidu.jpg");System.out.println(url1);System.out.println(url2);//创建图片图标ImageIcon imageIcon = new ImageIcon(url1);//将图标加到按钮上JButton jButton = new JButton(imageIcon);//将按钮加载带内容面板上contentPane.add(jButton);setBounds(500,300,500,300);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new TestJButton();}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D7Sis4RZ-1592671903600)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200621002132332.png)]

单选按钮
package com.tmy.lesson05;import javax.swing.*;
import java.awt.*;
import java.net.URL;public class TestJButton02 extends JFrame {public TestJButton02() {Container contentPane = getContentPane();//单选按钮JRadioButton radioButton1 = new JRadioButton("男");JRadioButton radioButton2 = new JRadioButton("女");JRadioButton radioButton3 = new JRadioButton("人妖");JRadioButton radioButton4 = new JRadioButton("妖人");//这里的按钮其实是可以多选的,但通过分组实现了单选,一个组里只能选一个,不在组里可继续选//由于单选框只能选择一个,所有要分组,因为一个组里只能选择一个ButtonGroup buttonGroup = new ButtonGroup();buttonGroup.add(radioButton1);buttonGroup.add(radioButton2);buttonGroup.add(radioButton3);//将按钮加载带内容面板上contentPane.setLayout(new FlowLayout());contentPane.add(radioButton1);contentPane.add(radioButton2);contentPane.add(radioButton3);contentPane.add(radioButton4);setBounds(500,300,500,300);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new TestJButton02();}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lvYFSksD-1592671903601)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200621003735559.png)]

复选按钮
package com.tmy.lesson05;import javax.swing.*;
import java.awt.*;public class TestJButton03 extends JFrame {public TestJButton03() {Container contentPane = getContentPane();//复选按钮JCheckBox jCheckBox1 = new JCheckBox("jCheckBox1");JCheckBox jCheckBox2 = new JCheckBox("jCheckBox2");JCheckBox jCheckBox3 = new JCheckBox("jCheckBox3");JCheckBox jCheckBox4 = new JCheckBox("jCheckBox4");//将按钮加载带内容面板上contentPane.setLayout(new FlowLayout());contentPane.add(jCheckBox1);contentPane.add(jCheckBox2);contentPane.add(jCheckBox3);contentPane.add(jCheckBox4);setBounds(500,300,500,300);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new TestJButton03();}
}

结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nqCur0yS-1592671903603)(C:\Users\TMY\AppData\Roaming\Typora\typora-user-images\image-20200621004423171.png)]

x1");
JCheckBox jCheckBox2 = new JCheckBox(“jCheckBox2”);
JCheckBox jCheckBox3 = new JCheckBox(“jCheckBox3”);
JCheckBox jCheckBox4 = new JCheckBox(“jCheckBox4”);

    //将按钮加载带内容面板上contentPane.setLayout(new FlowLayout());contentPane.add(jCheckBox1);contentPane.add(jCheckBox2);contentPane.add(jCheckBox3);contentPane.add(jCheckBox4);setBounds(500,300,500,300);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setVisible(true);
}public static void main(String[] args) {new TestJButton03();
}

}


结果:[外链图片转存中...(img-nqCur0yS-1592671903603)]

Day27_GUI编程相关推荐

  1. C++核心编程(一)

    C++ 核心编程 本系类列博客都是根据黑马的C++视频做的笔记. 本阶段主要针对C++面向对象编程技术做详细记录,探讨C++中的核心和精髓. 1.内存分区模型 C++程序在执行时,将内存大方向划分为4 ...

  2. 【Spring】面向切面编程AOP

    AOP基础 什么是AOP [废话解释]在软件业,AOP全称Aspect Oriented Programming 即:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AO ...

  3. python编程问题--第二次

    本质上grp 是一个dataframe 后面接一个[] 得到 series 两个[] 得到dataframe Groupby 如果后面放as_index=False 后面就能连续添加了 不加的话  同 ...

  4. OpenCL编程详细解析与实例

    OpenCL编程详细解析与实例 C语言与OpenCL的编程示例比较 参考链接: https://www.zhihu.com/people/wujianming_110117/posts 先以图像旋转的 ...

  5. C语言与OpenCL的编程示例比较

    C语言与OpenCL的编程示例比较 OpenCL支持数据并行,任务并行编程,同时支持两种模式的混合.对于同步 OpenCL支持同一工作组内工作项的同步和命令队列中处于同一个上下文中的 命令的同步. 在 ...

  6. LLVM一些编程语法语义特性

    LLVM一些编程语法语义特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数.全 ...

  7. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...

  8. TensorFlow编程结构

    TensorFlow编程结构 TensorFlow 与其他编程语言非常不同. 首先通过将程序分为两个独立的部分,构建任何拟创建神经网络的蓝图,包括计算图的定义及其执行.起初这对于传统程序员来说看起来很 ...

  9. MindSpore API编程概述

    MindSpore API编程概述 总体架构 MindSpore是一个全场景深度学习框架,旨在实现易开发.高效执行.全场景覆盖三大目标,其中易开发表现为API友好.调试难度低,高效执行包括计算效率.数 ...

最新文章

  1. 生命周期 用户可以操作dom_React 生命周期的打怪升级之路
  2. JavaScript | 继承
  3. 前端学习(3218):批量传递props
  4. [vue] 实际工作中,你总结的vue最佳实践有哪些?
  5. 注解由谁读取并解析的?
  6. C++ 使用模板Template
  7. 计算机组成原理整机实验报告,计算机组成原理加器实验报告.doc
  8. 多线程例题练手(c入门)
  9. opencv中的Mat、CvMat以及IplImage介绍以及三者之间的转换
  10. recvmsg和sendmsg函数
  11. java soap_Java使用SOAP协议访问webservice接口
  12. python注释快捷_python注释快捷键
  13. 基于asp.net725原创(古代)文学交流网站系统
  14. 通过RDA5807制作一个收音机
  15. c语言把字符变成asc11值,PLC字符与数据之间如何进行转换?
  16. 计算机视觉在生物公司的应用,生物视觉仿生在计算机视觉中的应用研究.pdf
  17. 夏培肃清华大学计算机,纪念夏培肃:中国计算机事业的“拓荒者”
  18. Web项目控制台无法打印中文,输出中文乱码,request设置了UTF-8
  19. 欧卡2在线服务器返回数据错误,omsi2开启时报错是怎么回事
  20. sublime text4在linux(ubuntu)下的安装及配置;sublime text4在linux(ubuntu)安装后输入lisence没反应;.desktop文件干嘛的

热门文章

  1. (C语言)栈应用简易计算器实现
  2. ReactiveX 简介
  3. linux内核进程状态,深入理解 Linux 内核学习笔记(一):进程
  4. JavaScript初学笔记总汇
  5. firefox访问网站,提示此网址已被限制 此网址使用了一个通常用于网络浏览以外目的的端口
  6. PCL点云处理之平面内两直线求交点(五十)
  7. PHP中/英文验证码
  8. 自动化抢购退烧药,口罩,抗原教程
  9. Windows开机自启与关闭
  10. 2019.4.11 一题 XSY 1551 ——广义后缀数组(trie上后缀数组)