14.swing
一。开发架构
1.最外层是一个jframe的框架
2.可以在框架中添加任意组件
3.组件分为两大类:
a。容器类型:可以继续在该容器中添加其他组件。例如:jpanel 面板,可以多个面板添加到同一个框架中
b。具体的组件:按钮,文本框,标体,文本域,可以添加到容器类型中
4.事件:是触发事件完成一定的功能
常用事件有:
a.按钮的监听事件:ActionListener 监听按钮的点击事件
b.鼠标监听事件:MouseListener 监听鼠标的按下,弹起,鼠标的移动
c.键盘监听事件:KeyListener 监听键盘的点击,弹起事件
5.在swing组件如何加载图片 见 PictureDEmo
a.通过jlable标签来加载
b.jpanel中的画笔对象来画出来
6.在jframe来自定义画板,画自己想要的内容。步骤
a.创建一个自定义的面板类,继承jpanel
b.初始化面饭的相关显示属性
c.把该面板加入到jframe中
d.在面板类中重写paintComponent(Graphics g)此方法,这个方法里面就是我们画画的地方
作业1.登录窗口
如果用户输入的是用户名“root”,密码“admin” 则登录成功,显示另外一个窗体并显示登录XXXX成功
如果输入有误弹出密码错误提示
作业2.通过按键左右键的点击来切换图片的显示 总共五张图片 如果到了末尾再点调回第一张
作业3:做一个计算器,完成通用功能
二。例子
计算器+按钮监听实例:
package com.demo1116; import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.plaf.basic.BasicSplitPaneUI.KeyboardUpLeftHandler; public class MyFrame extends JFrame{
double num1;//存放第一个数字
double num2;//存放第二个数字
String type;//记录当前的运算符号
boolean isSecond = false;//记录是否是第二个数字的开始
//按钮
JButton jb1;
JButton jb2;
JButton jb3; JButton jb_point;
JButton jb_add;
JButton jb_result;
//标体
JLabel jl1;
//文本框
JTextField jtf_username;
public MyFrame() {
//设置窗口的关闭模式 关闭窗口立即终止程序
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);//设置框架的大小
setLayout(null);//设置布局管理器为null,则表示使用手动布局
setLocationRelativeTo(null);
setTitle("计算器");
//添加其他组件
jb1 = new JButton("1");
jb1.setBounds(20, 100, 50, 50);
jb1.addActionListener(new MyButtonActionListener("1"));//给按钮添加事件监听器
this.add(jb1);//添加组件到容器中 jb2 = new JButton("2");
jb2.setBounds(80, 100, 50, 50);
jb2.addActionListener(new MyButtonActionListener("2"));//给按钮添加事件监听器
this.add(jb2);//添加组件到容器中 jb3 = new JButton("3");
jb3.setBounds(150, 100, 50, 50);
jb3.addActionListener(new MyButtonActionListener("3"));//给按钮添加事件监听器
this.add(jb3);//添加组件到容器中 jb_point = new JButton(".");
jb_point.setBounds(150, 180, 50, 50);
jb_point.addActionListener(new MyButtonActionListener("."));//给按钮添加事件监听器
this.add(jb_point);//添加组件到容器中 jb_add = new JButton("+");
jb_add.setBounds(150, 250, 50, 50);
jb_add.addActionListener(new MyButtonActionListener("+"));//给按钮添加事件监听器
this.add(jb_add);//添加组件到容器中 jb_result = new JButton("=");
jb_result.setBounds(150, 320, 50, 50);
jb_result.addActionListener(new MyButtonActionListener("="));//给按钮添加事件监听器
this.add(jb_result);//添加组件到容器中 // jl1 = new JLabel("用户名:");
// jl1.setBounds(20, 100, 150, 50);
// jl1.setFont(new Font("", Font.BOLD, 20));//给组件设置字体样式
// this.add(jl1); jtf_username = new JTextField("0");
jtf_username.setBounds(20, 20, 420, 50);
jtf_username.setEnabled(false);//不可编辑状态
jtf_username.setFont(new Font("", Font.BOLD, 20));
//将文本框的输入右对齐
jtf_username.setHorizontalAlignment(JTextField.RIGHT);
this.add(jtf_username); setVisible(true);//设置框架是否可见
} class MyButtonActionListener implements ActionListener{
String num;
MyButtonActionListener(String num){
this.num = num;
}
@Override
public void actionPerformed(ActionEvent e) {
switch(num){
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
if(jtf_username.getText().equals("0")){
jtf_username.setText("");
}
if(isSecond){
jtf_username.setText("");
}
jtf_username.setText(jtf_username.getText()+num);
isSecond = false;
break;
case ".":
if(jtf_username.getText().indexOf(".")==-1){
jtf_username.setText(jtf_username.getText()+num);
}
break;
case "+":
num1 = Double.valueOf(jtf_username.getText());//记录第一个数
isSecond = true;//接下来要输入第二个数字
type = "+";//记录运算符号
break;
case "=":
num2 = Double.valueOf(jtf_username.getText());//记录第二个数
switch(type){
case "+":
jtf_username.setText(num1+num2+"");
}
break;
} }
} public static void main(String[] args) {
new MyFrame();
}
}
键盘监听实例:
package com.demo1116; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import javax.swing.JFrame;
import javax.swing.JLabel; public class KeyActionDemo extends JFrame{
JLabel jl; public void init(){//初始化界面
this.setSize(500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);//设置窗口初始出现的位置为屏幕中央 jl = new JLabel();
jl.setBounds(10, 10, 30, 30);
this.add(jl); this.addKeyListener(new MyKeyListener()); this.setVisible(true);
} public KeyActionDemo() {
init();
} public static void main(String[] args) {
new KeyActionDemo();
} /**
* 键盘的监听适配器,该类实现类keylistener接口,所以继承该类等于实现了接口,优势是我们可以选择性的重写里面的方法
* @author allen
*
*/
class MyKeyListener extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
jl.setText(e.getKeyCode()+"");
}
}
}
加载图片实例:
package com.demo1116; import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
/**
* 加载图片案例
* @author allen
*/
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class PictureDemo extends JFrame{
JLabel jl_pic;
private void init() {
this.setSize(500, 400);// 设置窗体大小,宽和高 单位是像素
this.setResizable(false);// 设置窗体大小固定
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);// 设置窗体关闭时主线程自动关闭
this.setLocationRelativeTo(null);// 设置窗体出现的位置在显示器正中
this.setLayout(null);// 不使用布局管理器,启用手动布局 //第一种方式显示图片
// jl_pic = new JLabel(new ImageIcon("img/1.jpg"));
// jl_pic.setBounds(0, 0, 500, 400);
// this.add(jl_pic);
//第二种方式显示图片
MyPanel mp = new MyPanel();
this.add(mp);
this.setVisible(true);
} public PictureDemo() {
init();
} public static void main(String[] args) {
new PictureDemo();
}
}
/**
* 自定义面板 在面板中可以完成图片的制作
* @author allen
*/
class MyPanel extends JPanel{
public MyPanel() {
this.setBounds(0, 0, 500, 400);
this.setVisible(true);
} @Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
try {
//将图片文件读取到java缓存中,备用
BufferedImage bi = ImageIO.read(new File("img/1.jpg"));
//用画笔工具讲图片画到面板中去
g.drawImage(bi, 0, 0, this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
14.swing的更多相关文章
- 如何使用swing创建一个BeatBox
首先,我们需要回顾一些内容(2017-01-04 14:32:14): 1.Swing组件 Swing的组件(component,或者称之为元件),是较widget更为正确的术语,它们就是会放在GUI ...
- Java Swing快速构建窗体应用程序
以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...
- Swing应用开发实战系列之三:动态信息提示窗口
这里所说的“动态信息提示窗口”可不同于JOptionPane中的Message窗口和Confirm窗口,它们都是静态的模态的,更重要的是线程阻塞的,迫使你必须选择某个动作才能继续执行.我们接下来要分享 ...
- Java Swing 探索(一)LayoutManager
BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout 1.BorderLayout java.lang.Objec ...
- 客户端是选择Java Swing还是C# Winform
登录|注册 mentat的专栏 目录视图 摘要视图 订阅 [专家问答]韦玮:Python基础编程实战专题 [知识库]Swift资源大集合 [公告]博客新皮肤上线啦 ...
- swing入门例子
// a simple exmple that can show the basis of swing------------------------------------------------- ...
- swing的第一课
Swing介绍 Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用.它是建立在AWT API之上,并作为 AWTAPI 的更换,因为它几乎每一个控制对应 AWT ...
- 使用Swing实现简易而不简单的文档编辑器
本文通过Swing来实现文档简易而不简单的文档编辑器,该文档编辑器的功能包括: 设置字体样式:粗体,斜体,下划线,可扩展 设置字体:宋体,黑体,可扩展 设置字号:12,14,18,20,30,40, ...
- 【java图形计算器】 java awt swing组件应用
package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...
随机推荐
- ATOM中MARKDOWN的使用小结
1.ctrl+shift+p ; 输入ssvvp ; 回车 2.输入markdown-preview进行安装 3.打开任意.md 文件 ; 按 ctrl-shift-m 进行预览
- IP 地址基本知识
ip地址被分成了5类:A类,B类,C类,D类,E类 私有地址 只能在局域网内使用,不能在internet上使用的ip地址称为私有ip地址,私有ip地址有: 10.0.0.0-10.255.255.25 ...
- es6 语法 (对象扩展)
{ //简洁表示法 let o = 1; let k = 2; let es5 = { o:o, k:k }; let es6 = { o,k }; console.log(es5,es6); //1 ...
- 关于微信小程序<radio-group>布局排列
微信小程序更新以后今天<radio>全部变成垂直排列了,布局乱了. 一开始尝试给外层<view>添加display:flex;flex-direction:row:未果. 后来 ...
- JS中的柯里化(currying)
何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名). 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参 ...
- 2018-09-24 Java源码英翻中网页演示
在线演示地址: 源代码翻译 两部分如下. 独立的Java代码翻译库 续前文代码翻译尝试-使用Roaster解析和生成Java源码 源码库: program-in-chinese/java_code_t ...
- Python相关机器学习‘武器库’
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
- OSGI企业应用开发(十五)基于Spring、Mybatis、Spring MVC实现一个登录应用
前面文章中,我们已经完成了OSGI应用中Spring.Mybatis.Spring MVC的整合,本篇文章我们就在这个基础上来完成一个简单的登录应用,其中用户名和密码需要从数据库中查询. 前面文章中, ...
- 常用的JVM调优参数总结汇总【随时查阅学习】
本文章参数根据后期用的参数会持续更新 --- (1)-Xms20M 表示设置JVM启动内存的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置JVM启动内存的最大值为20M,必须以M为单 ...
- leetcode-217存在重复元素
leetcode-217存在重复元素 题意 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: ...