一。开发架构
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. Atom插件安装及推荐

    简介(了解更多去google或baidu) Atom 代码编辑器支持 Windows.Mac.Linux 三大桌面平台,完全免费,并且已经在 GitHub 上开放了全部的源代码.在经过一段长时间的迭代 ...

  2. iframe 标签属性解读

    iframe 元素会创建包含另外一个文档的内联框架(即行内框架)

  3. Python3 jupyter notebook 服务器搭建

    1. jupyter notebook 安装 创建 jupyter 目录 mkdir jupyter cd jupyter/ 创建独立的 Python3 运行环境,并激活进入该环境 virtualen ...

  4. git 入门教程之个性化 git

    前情概要 初识 git 时,我们就已经接触过 git 的基本配置,使用 git config 命令配置用户名和邮箱: # 配置当前项目(`local`)的用户名(`snowdreams1006`) g ...

  5. Fiddler做代理服务器时添加X-Forwarder-For转发真实客户端ip

    修改CustomRules.js 菜单: Rules->Customize Rules (ctrl+R) 在 static function OnBeforeRequest(oSession: ...

  6. Ext 日期格式化

    //日期格式化 Date.prototype.Format = function (fmt) { var o = { , //月份 "d+": this.getDate(), // ...

  7. 使用Visual Studio Team Services敏捷规划和项目组合管理(五)——组合管理

    使用Visual Studio Team Services敏捷规划和项目组合管理(五)--组合管理 组合待办事项为产品所有者提供关于几个敏捷特性团队工作的洞察.产品所有者可以将高优先级的目标定义为Ep ...

  8. ORA-01440: column to be modified must be empty to decrease precision or scale

    在修改表字段的NUMBER类型的精度或刻度时,你可能会遇到ORA-01440: column to be modified must be empty to decrease precision or ...

  9. shell编程-文件包含(十)

    shell文件包含指的是脚本中包含外部脚本,然后将其封装起来重新作为一个独立的文件而存在 文件包含格式 使用"."+空格+文件名:. filename 或者source+空格+文件 ...

  10. Foreach用法

    循环语句是编程的基本语句,在C#中除了沿用C语言的循环语句外,还提供了foreach语句来实现循环.那么我要说的就是,在循环操作中尽量使用foreach语句来实现.   为了来更好地说明为什么要提倡使 ...