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 ...
随机推荐
- jQuery 事件 - ready() 方法
转载:http://www.w3school.com.cn/jquery/jquery_hide_show.asp 实例 在文档加载后激活函数: $(document).ready(function( ...
- git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
方法1:如果你想保留刚才本地修改的代码,并把git服务器上的代码pull到本地(本地刚才修改的代码将会被暂时封存起来) git stash git pull origin master git sta ...
- jQuery效果之jQuery Color animation 色彩动画扩展
jQuery 的动画方法(animate)支持各种属性的过渡,但是默认并不支持色彩的过渡,该插件正是来补足这一点! PS: 该插件支持 RGBA 颜色的过渡,但是请注意,IE8以下的版本不支持 RGB ...
- 13.Odoo产品分析 (二) – 商业板块(6) –采购(3)
接上一篇 查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (二) – 商业板块(6) –采购(2) 7. 仓库 仓库是在安装采购管理模块时出现的菜单.用于管理工厂库存,包括已经在手的货物 ...
- listview 异步加载图片并防止错位
1.图片错位原理: 如果我们只是简单显示list中数据,而没用convertview的复用机制和异步操作,就不会产生图片错位:重用convertview但没用异步,也不会有错位现象.但我们的项目中li ...
- Android Room框架学习笔记
一.使用 1.build.gradle引入 compile "android.arch.persistence.room:runtime:1.0.0" annotationProc ...
- 餐饮ERP相关问题FAQ
1.订单无法自动上传,手动上传也是失败. 检查网络是否有问题,网络如果正常,打开本地连接-属性-internet协议版本4-首选DNS服务器设置为(114.114.114.114) 然后再打开IE浏览 ...
- SQL强化练习(面试与学习必备)
一.经典选课题A 1.1.请同时使用GUI手动与SQL指令的形式创建数据库.表并添加数据. 题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教 ...
- zsh快捷键
bash和zsh两种shell功能非常相似,只不过zsh的功能比bash更强大一些.这两种shell的快捷键命令也非常相似,对于常用shell的人来说,了解一些快捷键操作将会十分有益,因为使用快捷键将 ...
- ELK环境配置+log4j日志记录
ELK环境配置+log4j日志记录 1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要. 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一 ...