一。开发架构
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的更多相关文章

  1. 如何使用swing创建一个BeatBox

    首先,我们需要回顾一些内容(2017-01-04 14:32:14): 1.Swing组件 Swing的组件(component,或者称之为元件),是较widget更为正确的术语,它们就是会放在GUI ...

  2. Java Swing快速构建窗体应用程序

    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...

  3. Swing应用开发实战系列之三:动态信息提示窗口

    这里所说的“动态信息提示窗口”可不同于JOptionPane中的Message窗口和Confirm窗口,它们都是静态的模态的,更重要的是线程阻塞的,迫使你必须选择某个动作才能继续执行.我们接下来要分享 ...

  4. Java Swing 探索(一)LayoutManager

    BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout 1.BorderLayout java.lang.Objec ...

  5. 客户端是选择Java Swing还是C# Winform

      登录|注册     mentat的专栏       目录视图 摘要视图 订阅 [专家问答]韦玮:Python基础编程实战专题     [知识库]Swift资源大集合    [公告]博客新皮肤上线啦 ...

  6. swing入门例子

    // a simple exmple that can show the basis of swing------------------------------------------------- ...

  7. swing的第一课

    Swing介绍 Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用.它是建立在AWT API之上,并作为 AWTAPI 的更换,因为它几乎每一个控制对应 AWT ...

  8. 使用Swing实现简易而不简单的文档编辑器

    本文通过Swing来实现文档简易而不简单的文档编辑器,该文档编辑器的功能包括: 设置字体样式:粗体,斜体,下划线,可扩展 设置字体:宋体,黑体,可扩展 设置字号:12,14,18,20,30,40, ...

  9. 【java图形计算器】 java awt swing组件应用

    package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...

随机推荐

  1. mysql date_format()函数

    DATE_FORMAT(DATE,FORMAT)函数 占位符 说明 %a 缩写的星期几(Sun.....Sat) %b 缩写的月份(Jan.....Dec)  %c 数字形式的月份(1.......1 ...

  2. 掌握PHP垃圾回收机制

    php的垃圾回收机制可以简单总结为 引用计数 写时复制 COW机制, 本文主要和大家分享掌握php垃圾回收机制的知识,希望能帮助到大家. 引用计数基本知识 官网的解答如下 每个php变量存在一个叫”z ...

  3. 查询文章的上下篇Sql语句

    直接开入正题 文章内容页一般都会有上一篇和下一篇的功能: 那么查询上下篇的sql语句应该怎么写呢:示例数据表:zmd_article自增主键:id当前文章id:10 肯定有人说,这简单啊id+1和id ...

  4. BZOJ1101: [POI2007]Zap(莫比乌斯反演)

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2951  Solved: 1293[Submit][Status ...

  5. 网络基础 记一次HTTPS证书验证测试过程

    记一次HTTPS证书验证测试过程 by:授客 QQ:1033553122 实践 1) 安装证书 选择主机A(假设10.202.95.88)上安装https证书 说明:采用https的服务器,必须安装数 ...

  6. Spotlight on Mysql在Windows平台下的安装及使用简介

    Spotlight on Mysql在Windows平台下的安装及使用简介   by:授客 QQ:1033553122 1.   测试环境 Win7 64位 mysql-connector-odbc- ...

  7. (网页)JavaScript周末总结(一)

    本周学习的内容总结: 1. 2章在html中使用javascript. 2. 3章Javascript的基本概念. 3. 4章变量,作用域,内存问题. 1-1:2章以下内容: 1.包含javascri ...

  8. html常用标签学习笔记

    本文内容: 前言:本文讲述的内容包括几类常用标签,以及这些标签的一些常用属性(有一些属性由于已经有CSS样式来代替,所以对于一些不重要的这里选择不讲) 排版标签 段落标签:p div span 标题标 ...

  9. Spark应用【根据新df更新旧df】

    // 主键字段保持不变,再转换回来 var columnMap:Map[String, String] = Map() for(key <- keysOpt){ columnMap += (ke ...

  10. github提交代码失败

    向github上面提交代码,提示代码里面有大文件,建议使用git-lfs. 1,安装git-lfs yum install git-lfs 2,配置需要追踪的打文件(由于我这里提交的是jar包) gi ...