自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (27)
  • 收藏
  • 关注

转载 Java并发编程-无锁CAS与Unsafe类及其并发包Atomic

在前面一篇博文中,我们曾经详谈过有锁并发的典型代表synchronized关键字,通过该关键字可以控制并发执行过程中有且只有一个线程可以访问共享资源,其原理是通过当前线程持有当前对象锁,从而拥有访问权限,而其他没有持有当前对象锁的线程无法拥有访问权限,也就保证了线程安全。但在本篇中,我们将会详聊另外一种反向而行的并发策略,即无锁并发,即不加锁也能保证并发执行的安全性。 本篇的思路是先阐明无锁执

2017-08-31 19:00:25 253

原创 公平锁和非公平锁

公平锁: Threads acquire a fair lock in the order in which they requested it 非公平锁: a nonfair lock permits barging: threads requesting a lock can jump ahead of the queue of waiting threads if the lock h

2017-08-28 10:51:21 555

原创 Hbase集群搭建及Shell使用

准备三台机器node-131 node-132 node-133 这里为主机名,也可写入IP,主机名需要在/etc/hosts文件里加入对应节点信息。Hbase启动依赖于zookeeper集群和Hadoop集群, 在配置Hbase前先搭建好Zookeeper和Hadoop环境 具体搭建请参考前面两篇文章 Zookeeper集群配置 Hadoop集群安装 方便集群启动所机器请先做

2017-08-25 15:09:15 3869

原创 Hadoop集群安装

node-131 node-132 node-133 这里为主机名,也可写入IP,主机名需要在/etc/hosts文件里加入对应节点信息。下载https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz安装1.解压进入/usr/local.hadoop/目录,将下载的文

2017-08-25 14:31:30 4584

原创 Zookeeper集群配置

准备三台机器node-131 node-132 node-133 这里为主机名,也可写入IP,主机名需要在/etc/hosts文件里加入对应节点信息。下载zookeeper包http://mirrors.hust.edu.cn/apache/zookeeper/stable/zookeeper-3.4.10.tar.gz安装1.解压 进入指定目录,解压命令: Tar -zxvf

2017-08-25 14:07:38 4895

原创 运行shell脚本,错误:-bash: ./xxx.sh: /bin/bash^M: bad interpreter: No such file or directory

今天准备写一个脚本一次性启动zookeeper,hadoop,hbase。发现执行脚本报如下错误: 他报错找不到该文件或者目录,发现明明就有的啊.主要原因是 我在windows下编辑然后上传到Linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。1.首先用vi命令打开文件2.在vi命令模式中使用 :set ff 命令返回的结

2017-08-25 10:28:36 2694 1

原创 Linux服务器间做免密钥登录

Linux服务器间做免密钥登录有三台主机:[email protected]@[email protected] 新建 /root/.ssh目录d到该目录(目录地址可自己定义)1.对每台机器运行ssh-keygen -t rsa指令期间会出现三条需要你输入的选项Enter file i

2017-08-24 15:33:17 4868

原创 Redis 集群搭建

1.创建多个节点,基本配置如下:port 7000 //端口7000,7002,7003 bind 本机ip //默认ip为127.0.0.1 需要改为 其他节点机器可访问的ip 否则创建集群时无法访

2017-08-22 16:31:23 2987

原创 Linux 复制文件

复制文件,只有源文件较目的文件的修改时间新时,才复制文件 cp -u -v file1 file2 .将文件file1复制成文件file2 cp file1 file2 .采用交互方式将文件file1复制成文件file2 cp -i file1 file2 .将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制

2017-08-22 16:27:48 2303

原创 linux解压文件命令

tar -xJf node-v4.4.4-linux-x64.tar.xz 1、*.tar 用 tar -xvf 解压 2、*.gz 用 gzip -d或者gunzip 解压 3、.tar.gz和.tgz 用 tar -xzf 解压 4、*.bz2 用 bzip2 -d或者用bunzip2 解压 5、*.tar.bz2用tar -xjf 解压 6、*.Z 用 uncompress 解压

2017-08-22 16:27:15 1781

原创 ubnntu安装jdk

1.添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update2.安装oracle-java-installer  jdk7 sudo apt-get install oracle-java7-installer  jdk8 sudo apt-get install oracle-java8-installer

2017-08-22 16:26:19 1634

原创 linux 端口开放

安装iptables apt-get install iptables安装好了之后就可以添加规则了 iptables -I INPUT -p tcp –dport 80 -j ACCEPT然后可以直接保存了 iptables-save持久化iptables 上文那样做只是暂时保存了开放端口的信息,如果服务器重启,保存的信息就掉了,所以我们需要持久化一下端口信息,这里我们使用 iptables

2017-08-22 16:25:28 1498

原创 linux 安装SSH

(1)关闭防火墙,执行sudo ufw disable(不一定需要) (2)安装OpenSSH,执行sudo apt-get install openssh-server openssh-client命令。 (3)执行netstat -tnl命令,查看22端口是否开通。

2017-08-22 16:24:26 781

原创 Linux 常用命令

查看tomcat运行日志 tail -f catalina.out启动tomcat ./startup.sh设置文件可读可写可执行:chmod 777 index.html 或者 chmod -R a+w 目录名linux 查看网速:watch -n 1 “/sbin/ifconfig eth0 | grep bytes”ps 命令用于查看当前正在运行的进程: ps -ef | grep javal

2017-08-22 16:23:44 749

转载 MySQL必知必会知识点总结一二

一、MySQL官方文档地址https://dev.mysql.com/doc/refman/5.7/en/二、MySQL常用命令1、如何登陆MySQL数据库mysql -u username -p2、如何开启/关闭mysql服务service mysql start/stop3、查看mysql的状态service mysql stat

2017-08-18 16:07:52 3512 1

转载 MySQL存储引擎MyISAM与InnoDB区别总结整理

1、MySQL默认存储引擎的变迁在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。2、MyISAM与InnoDB存储引擎的主要特点MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得

2017-08-18 16:06:21 759

转载 mysql数据库分库分表策略的具体实现方案

相关文章:1、 使用Spring AOP实现MySQL数据库读写分离案例分析2、MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解:http://blog.csdn.net/xlgen157387/article/details/513312443、MySQL主从复制的常见拓扑、原理分析以及如何提高主从复制的效率总结:http:/

2017-08-18 16:04:39 3712

转载 MySQL 清除表空间碎片

碎片产生的原因(1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白、被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大;(2)当执行插入操作时,MySQL会尝试使用空白空间,但如果某个空白空间一直没有被大小合适的数据占用,仍然无法将其彻底占用,就形成了碎片;(3)当MySQL对数据进行扫描时,它扫描的对象实际是列表的容

2017-08-18 16:02:30 784

转载 MySQL开发规范与使用技巧总结

1.库名、表名、字段名必须使用小写字母,并采用下划线分割。 a)MySQL有配置参数lower_case_table_names,不可动态更改,Linux系统默认为 0,即库表名以实际情况存储,大小写敏感。如果是1,以小写存储,大小写不敏感。如果是2,以实际情况存储,但以小写比较。 b)如果大小写混合使用,可能存在abc,Abc,ABC等多个表共存,容易导致混乱。 c)字段名显示区分大

2017-08-18 16:01:20 3482

转载 mysql常见面试题

1、如何登陆mysql数据库MySQL -u username -p2、如何开启/关闭mysql服务service mysql start/stop3、查看mysql的状态service mysql status4、如何显示数所有数据库show databases5、如何获取表内所有字段对象的名称和类型describe tab

2017-08-18 16:00:15 3515

转载 并发控制中的乐观锁与悲观锁

为什么需要锁?在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。2典型的冲突类型:(1)丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。(2)脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:用户A,B看

2017-08-18 15:57:46 774

转载 数据库的隔离级别与事务的特性

数据库的隔离级别分类1.Read Uncommited(未提交读):没有提交就可以读取到数据(发出了insert,但没有commit就可以读取到);2.Read Commited(提交读):只有提交后才可以读;3.Repeatable Read(可重复读):MySQL默认级别,必须提交才能看到,读取数据是数据被锁住;4.Serialiazable(序列化读):最高隔

2017-08-18 15:56:55 757

转载 使用mysqlreplicate命令快速搭建 Mysql 主从复制

MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能、更高可靠性要求的场合。与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少。(可参考:http://blog.csdn.net/xlgen157387/article/details/5

2017-08-18 15:53:46 825

转载 mysql查询效率总结

1、数据库设计方面: A. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 B. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:selec

2017-08-18 15:46:09 4753

原创 丑数

题目大致为: 丑数的定义为:只包含因子2,3和5的数。求按从小到大的顺序的第1500个丑数。约定:1当做第一个丑数。 思路: 设置三个指针分别代表该位置2,*3和*5,并将这三个数中的最小值插入数组中,若当前位置的值对应的因子<=刚插入的值,便将该指针后移,直到新的位置上的值*对应的因子>刚插入的值。 Java实现:package com.sun.jojo.datastruc

2017-08-17 18:58:41 761

原创 第一个只出现一次的字符

题目大致为: 在字符串中找出第一个只出现一次的字符。 思路: 在Java中可以把字符串转换成字符数组处理,可以使用HashMap的数据结构存储,其中key为字符,value为对应出现的次数,这样通过两次遍历字符数组就可以找出,其中,第一次是构建HashMap,第二次是对每个字符判断其HashMap中对应的value的值是否为1。 java:package com.su

2017-08-17 18:56:16 747

原创 圆圈中最后剩下的数字(约瑟夫环问题)

题目大致为: 0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。从m+1个数重新开始,求出这个圆圈里剩下的最后一个数字。 思路: 第一种办法就是通过环形链表模拟这样的删除过程; Java代码package com.sun.jojo.datastructure;/** * Author sunjiamin * Date 2017/8/1

2017-08-16 16:54:26 939

原创 最小的k个数

题目大致为: 输入n个整数,找出其中最小的k个数。 思路: 使用类似二叉查找树的形式实现,控制好树中的结点个数为k。 Java代码package com.sun.jojo.datastructure;import java.util.Iterator;import java.util.TreeSet;/** * Author sunjiamin * Date 2017/

2017-08-15 16:21:10 927 1

原创 两个链表的第一个公共结点

题目大致为: 输入两个链表,找出它们的第一个公共结点。 思路: 第一个公共结点开始往后都是公共结点,所以在末尾向前遍历,就可以找到第一个公共结点。利用上面的思想,可以先计算两个链表的长度,计算两个链表的长度差,然后先遍历较长的链表,等到剩余长度相等时开始同时遍历,这样就能较快地找到相同的结点,时间复杂度为O(m+n),其中m,n分别为两个链表的长度。package com.sun.jo

2017-08-15 15:51:22 812

原创 TCP三次握手/四次挥手

CP三次握手 通常我们进行HTTP连接网络的时候我们会进行TCP的三次握手,然后传输数据,然后再释放连接。 TCP三次握手的过程为: ● 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认; ● 第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置

2017-08-13 16:40:16 2937

原创 spring容器创建对象的3种方式(bean的实例化)

spring容器创建对象的3种方式(bean的实例化) **1,调用默认的构造函数(默认)** 1)指定bean的class属性 2)class需要一个默认的空构造器 <bean id="helloWorld" class="com.jxn.HelloWorld" /> 得到实例对象: H

2017-08-13 16:25:17 5300

原创 Fork/Join框架

什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+。。+100

2017-08-13 16:19:20 2549

转载 Java String面试题

试题一、String s = new String(“abc”)创建了几个对象? String s = new String(“abc”)实际上是”abc”本身就是字符串池中的一个对象,在运行 new String()时,把字符串池的字符串”abc”复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在字符串池中,一个在堆中。(注:我们假设的是字符串池中默认是没有abc字符串

2017-08-11 10:21:51 1268

原创 Java并发之CountDownLatch、CyclicBarrier和Semaphore

这次说一下 JUC 中的同步器三个主要的成员:CountDownLatch、CyclicBarrier 和 Semaphore(不知道有没有初学者觉得这三个的名字不太好记)。这三个是 JUC 中较为常用的同步器,通过它们可以方便地实现很多线程之间协作的功能。(下面的代码出自 JDK 文档) CountDownLatch 直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门

2017-08-10 13:50:52 1145

原创 java虚拟机规定必须立即初始化类的5种情况

Java类加载机制中,规定了有且仅有5种情况必须立即对类进行初始化(而加载,验证,准备自然再次之前): 1. 遇到new,getstatic,putstatic和invokestatic这4条指令时,如果类没有初始化时,必须初始化类。四条指令对应我们日常所见的 使用new关键字实例化对象,读取一个类的静态字段,设置一个类的静态字段(被final修饰的静态字段除外,因为已在编译期把结果放入常量池

2017-08-09 14:06:42 4024

原创 java MethodHandle解析

简介 java7在JSR 292中增加了对动态类型语言的支持,使Java也可以像C语言那样将方法作为参数传递,其实现在lava.lang.invoke包中。MethodHandle作用类似于反射中的Method类,但它比Method类要更加灵活和轻量级。通过MethodHandle进行方法调用一般需要以下几步: (1)创建MethodType对象,指定方法的签名; (2)在MethodHand

2017-08-09 11:25:22 3118

原创 synchronized和volatile理解

一,volatile关键字的可见性 要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下: 从图中可以看出: ①每个线程都有一个自己的本地内存空间–线程栈空间???线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作 ②对该变量操作完后,在某个时间再把变量刷新回主内存 关于JAVA内存模型,更详细的可参考: 深入理解

2017-08-08 15:56:13 3282

原创 String a = "abc" 与String b = new String("abc")的区别

假如我们, String a = “abc”; “abc”存在字符串常量池中 String b = “abc”;if(a == b){} //这里 == 判断的是a b 是否指向”abc”这个字符内存池,在堆区里面的一块相同地址!——-假如我们这样做——- String a = “abc”; String b = “ab” + “c”;if(a == b){} //这里也是相等的,因为只有

2017-08-08 15:50:32 2896

原创 Java中ArrayList和LinkedList区别

一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为

2017-08-08 15:46:51 1388

原创 Java中Array与ArrayList的主要区别

1)精辟阐述: 可以将 ArrayList想象成一种“会自动扩增容量的Array”。2)Array([]):最高效;但是其容量固定且无法动态改变; ArrayList: 容量可动态增长;但牺牲效率;3)建议: 基于效率和类型检验,应尽可能使用Array,无法确定数组大小时才使用ArrayList! 不过当你试着解决更一般化的问题时,Array的功能就可能过于受限。4)Java中一

2017-08-08 15:44:20 1154

基于CNN+LSTM的短时交通流量预测方法

基于CNN+LSTM的短时交通流量预测方法

2022-03-15

天津大学2010年运筹学真题.pdf

天津大学2010年运筹学考研 真题.pdf

2020-03-18

天津大学2012运筹学真题.pdf

天津大学2012 运筹学考研 真题

2020-03-18

西北工业大学+运筹学.rar

西北工业大学 考研 运筹学真题

2020-03-18

Hadoop3.0分布式集群搭建(HA)详细文档.docx

详细描述Hadoop3.0 高可用分布式集群搭建。步骤清晰。

2018-05-22

阿里开发规范V1.11.pdf

阿里开发规范V1.11

2017-08-18

7天学会spring cloud教程.pdf

7天学会spring cloud教程

2017-06-08

javascript权威指南 第6版英文版(含源代码).rar

javascript权威指南 第6版英文版(含源代码).rar 详细讲解javascript

2014-05-07

7天搞定Java基础_课件ppt.rar

7天搞定Java基础_课件ppt.rar Java简单入门教程ppt

2014-05-07

构架师.pdf

教你如何成长为一个合格的构架师!祝你成功

2014-01-07

android 常用工具类

在开发中经常用到的一些android常用工具类,总结起来,收藏下!!

2013-08-29

Android手机平台移植与底层开发.pdf

Android手机平台移植与底层开发.pdf

2013-06-26

Windows Phone 8开发技巧与案例精解.pdf

Windows Phone 8开发技巧与案例精解.pdf

2013-06-26

md5算法C#的实现

md5算法C#的实现

2013-06-16

可扩展标记语言.pdf

可扩展标记语言.pdf可扩展标记语言.pdf可扩展标记语言.pdf可扩展标记语言.pdf可扩展标记语言.pdf可扩展标记语言.pdf

2013-06-16

W3CSchool全套Web开发手册.chm

W3CSchool全套Web开发手册.chm

2013-06-16

WPF编程入门

WPF编程入门

2013-06-16

java课程设计范例.jsp.doc

java课程设计范例.jsp.doc 帮助你编写详细的课程设计

2012-09-20

java中国象棋代码(单机版).

java中国象棋代码(单机版)的详细代码解说

2012-09-20

疯狂Java实战演义(光盘源代码)

疯狂Java实战演义(光盘源代码) CSDN

2012-09-20

Thinking in Java 4th Edition

Thinking in Java 4th Edition

2012-09-20

Java仿Vista界面风格的登录窗口

Java仿Vista界面风格的登录窗口Java仿Vista界面风格的登录窗口的详细代码

2012-09-20

WCF简单实例

wcf实例

2012-06-30

ppt转换成word软件

实用的ppt转化为word软件,小软件大用处。

2012-06-30

Android开发指南中文版

详细的安卓开发详解,手把手教给你。安卓开发入门。

2012-06-30

制作登录界面

/MainFrame.java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MainFrame extends JFrame implements ActionListener{ private Container cont; private JPanel panelMenu; private JPanel panelToolBar; private JPanel panelCompent; private JButton btnLeft; private JButton btnCenter; private JButton btnRight; private JButton btnBorder; private JButton btnGrid; private JLabel labHit; private JMenuBar menuBar; private JMenu menuOperation; private JMenu menuHelp; private JMenuItem mItemFlowLeft; private JMenuItem mItemFlowCenter; private JMenuItem mItemFlowRight; private JMenuItem mItemBorder; private JMenuItem mItemGrid; private JToolBar toolBar; private JButton tBtnLeft; private JButton tBtnCenter; private JButton tBtnRight; private JButton tBtnBorder; private JButton tBtnGrid; public MainFrame(){ this.setTitle("第一个界面"); this.setBounds(300, 300, 600, 450); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); cont = this.getContentPane(); // cont.setLayout(new GridLayout(3, 9)); cont.setLayout(null); initPanel(); initMenu(); initToolBar(); initCompent(); addMenu(); addCompent(); // addBorderCompent(); this.setVisible(true); } public void initPanel(){ panelMenu = new JPanel(); panelMenu.setLayout(new FlowLayout(FlowLayout.LEFT)); panelMenu.setBounds(0, 0, 600, 30); panelToolBar = new JPanel(); panelToolBar.setLayout(new FlowLayout(FlowLayout.LEFT)); panelToolBar.setBounds(0, 30, 600, 50); panelCompent = new JPanel(); panelCompent.setLayout(new GridLayout(3, 2)); panelCompent.setBounds(0, 80, 600, 350); cont.add(panelMenu); cont.add(panelToolBar); cont.add(panelCompent); } public void initMenu(){ menuBar = new JMenuBar(); menuOperation = new JMenu("布局操作"); menuHelp = new JMenu("帮助"); mItemFlowLeft = new JMenuItem("流式左布局"); mItemFlowLeft.addActionListener(this); mItemFlowCenter = new JMenuItem("流式居中"); mItemFlowCenter.addActionListener(this); mItemFlowRight = new JMenuItem("流式右布局"); mItemFlowRight.addActionListener(this); mItemBorder = new JMenuItem("边界布局"); mItemBorder.addActionListener(this); mItemGrid = new JMenuItem("网格布局"); mItemGrid.addActionListener(this); } public void initToolBar(){ toolBar = new JToolBar(); tBtnLeft = new JButton(new ImageIcon("COPY.jpg")); tBtnLeft.addActionListener(this); tBtnLeft.setToolTipText("流式左布局"); tBtnCenter = new JButton(new ImageIcon("HELP.jpg")); tBtnCenter.addActionListener(this); tBtnCenter.setToolTipText("流式居中"); tBtnRight = new JButton(new ImageIcon("find.jpg")); tBtnRight.addActionListener(this); tBtnRight.setToolTipText("流式右布局"); tBtnBorder = new JButton(new ImageIcon("CUT.jpg")); tBtnBorder.addActionListener(this); tBtnBorder.setToolTipText("边界布局"); tBtnGrid = new JButton(new ImageIcon("OPEN.jpg")); tBtnGrid.addActionListener(this); tBtnGrid.setToolTipText("网格布局"); toolBar.add(tBtnLeft); toolBar.add(tBtnCenter); toolBar.add(tBtnRight); toolBar.add(tBtnBorder); toolBar.add(tBtnGrid); panelToolBar.add(toolBar); } public void initCompent(){ btnLeft = new JButton("LEFT"); btnLeft.addActionListener(this); btnRight = new JButton("RIGHT"); btnRight.addActionListener(this); btnCenter = new JButton("CENTER"); btnCenter.addActionListener(this); btnBorder = new JButton("BORDER"); btnBorder.addActionListener(this); btnGrid = new JButton("GRID"); btnGrid.addActionListener(this); labHit = new JLabel("提示"); } public void addMenu(){ menuOperation.add(mItemFlowLeft); menuOperation.add(mItemFlowCenter); menuOperation.add(mItemFlowRight); menuOperation.add(mItemBorder); menuOperation.add(mItemGrid); menuBar.add(menuOperation); menuBar.add(menuHelp); panelMenu.add(menuBar); } public void addCompent(){ panelCompent.add(btnLeft); panelCompent.add(btnCenter); panelCompent.add(btnRight); panelCompent.add(btnBorder); panelCompent.add(btnGrid); panelCompent.add(labHit); } public void addBorderCompent(){ panelCompent.add(btnLeft, "West"); panelCompent.add(btnCenter, "Center"); panelCompent.add(btnRight, "East"); panelCompent.add(btnBorder, "North"); panelCompent.add(btnGrid, "South"); } public void actionPerformed(ActionEvent aEvt){ if((btnLeft == aEvt.getSource()) ||(mItemFlowLeft == aEvt.getSource()) ||(tBtnLeft == aEvt.getSource())){ panelCompent.setLayout(new FlowLayout(FlowLayout.LEFT)); labHit.setText("流式布局管理器左靠齐"); } else { if((btnRight == aEvt.getSource()) ||(mItemFlowRight == aEvt.getSource()) ||(tBtnRight == aEvt.getSource())){ panelCompent.setLayout(new FlowLayout(FlowLayout.RIGHT)); labHit.setText("流式布局管理器右靠齐"); } else { if((btnCenter == aEvt.getSource()) ||(mItemFlowCenter == aEvt.getSource()) ||(tBtnCenter == aEvt.getSource())){ panelCompent.setLayout(new FlowLayout(FlowLayout.CENTER)); labHit.setText("流式布局管理器中靠齐"); } else { if((btnBorder == aEvt.getSource()) ||(mItemBorder == aEvt.getSource()) ||(tBtnBorder == aEvt.getSource())){ panelCompent.setLayout(new BorderLayout()); addBorderCompent(); labHit.setText("边界布局管理器"); } else{ if((btnGrid == aEvt.getSource()) ||(mItemGrid == aEvt.getSource()) ||(tBtnGrid == aEvt.getSource()) ){ panelCompent.setLayout(new GridLayout(3, 2)); // addBorderCompent(); labHit.setText("网格布局管理器"); } } } } } } } //LoginFrame.java import javax.swing.*; import java.awt.*; import java.awt.event.*; class LoginFrame extends JFrame implements ActionListener{ private Container cont; private JLabel labUserName; private JLabel labPassword; private JTextField txtUserName; private JTextField txtPassword; private JButton btnOK; private JButton btnCancel; public LoginFrame(){ this.setTitle("登录界面"); this.setSize(300, 250); this.setLocation(300, 300); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); initCont(); initCompent(); addCompent(); this.setVisible(true); } public void initCont(){ cont = this.getContentPane(); cont.setLayout(null); } public void initCompent(){ labUserName = new JLabel("用户名:"); labPassword = new JLabel("密 码:"); txtUserName = new JTextField(); txtPassword = new JPasswordField(); btnOK = new JButton("登录"); btnCancel = new JButton("重置"); } public void addCompent(){ cont.add(labUserName); labUserName.setBounds(40,40,80,30); cont.add(labPassword); labPassword.setBounds(40,90,80,30); cont.add(txtUserName); txtUserName.setBounds(120,40,120,30); cont.add(txtPassword); txtPassword.setBounds(120,90,120,30); cont.add(btnOK); btnOK.addActionListener(this); btnOK.setBounds(60,170,80,30); cont.add(btnCancel); btnCancel.addActionListener(this); btnCancel.setBounds(160,170,80,30); } public void actionPerformed(ActionEvent aEvt){ if(aEvt.getSource() == btnOK){ if((txtUserName.getText().equals("denghong")) &&(txtPassword.getText().equals("123"))){ new MainFrame(); this.dispose(); } } else{ if(aEvt.getSource() == btnCancel){ labUserName.setText(""); labPassword.setText(""); } } } } //Test.java public class Test{ public static void main(String[] args){ new LoginFrame(); } }

2011-11-23

制作小动画

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Animation extends JFrame implements Runnable,ActionListener{ private Container cont; private JButton btnUp; private JButton btnDown; private ImageIcon imgPlane; private ImageIcon imgBullet; private int planeX; private int planeY; private int bulletX; private int bulletY; private int planeSpeed; private int bulletSpeed; private int planeChangeSpeed; private Thread thread; public Animation(){ this.setBounds(30, 30, 400, 300); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); cont = this.getContentPane(); cont.setLayout(null); imgPlane = new ImageIcon("find.jpg"); imgBullet = new ImageIcon("bullet.jpg"); planeX = 0; planeY = 150; bulletX = 400; bulletY = 150; planeSpeed = 8; bulletSpeed = 8; planeChangeSpeed = 6; btnUp = new JButton("up"); btnDown = new JButton("down"); btnUp.setBounds(0, 240, 80, 30); btnDown.setBounds(90, 240, 80, 30); btnUp.addActionListener(this); btnDown.addActionListener(this); cont.add(btnUp); cont.add(btnDown); thread = new Thread(this); thread.start(); this.setVisible(true); } public void paint(Graphics grp){ super.paint(grp); imgPlane.paintIcon(this, grp, planeX, planeY); imgBullet.paintIcon(this, grp, bulletX, bulletY); } public void run(){ while((bulletX > 0) &&(planeX < 400)){ repaint(); planeX = planeX + planeSpeed; bulletX = bulletX - bulletSpeed; try{ Thread.sleep(200); }catch(Exception e){} } thread = null; } public void actionPerformed(ActionEvent aEvt){ JButton ob=(JButton)aEvt.getSource(); if(ob==btnUp){ planeY-=planeChangeSpeed; } if(ob==btnDown){ planeY+=planeChangeSpeed; } } public static void main(String args[]){ new Animation(); } }

2011-11-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除