自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Cloud 第七篇:高可用分布式配置中心(Spring Cloud Config)

项目地址 spring-cloud-config-server7.1 简介在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中, 有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个...

2018-06-06 15:50:24 346

原创 Spring Cloud 第六篇: 路由网关(zuul)

项目源码:module:spring-cloud-service-zuul在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群), 然后再到具体的服。,服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理,配置服务的配置文件放在git仓库,方便开发人员随时改配置。6.1 ...

2018-06-06 15:48:44 225

原创 Spring Cloud 第五篇: 断路器(Hystrix)

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。 为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞, 此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服...

2018-06-06 15:46:23 202

原创 Spring Cloud 第四篇: 服务消费者(Feign)

项目源码 module:spring-cloud-feigon上面,讲述了如何通过RestTemplate+Ribbon去消费服务,这里主要讲述如何通过Feign去消费服务。4.1 Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性, 可使用Feign 注解和JAX-RS注解。Feign支持...

2018-06-06 15:45:30 323

原创 Spring Cloud 第三篇:服务消费者(rest+ribbon)

项目地址 module:spring-cloud-service-ribbon在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。 Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。3.1 ribbon简介ribbon是一个负载均衡客户端,可...

2018-06-06 15:43:39 252

原创 spring cloud 第二篇: 创建一个服务提供者 (eureka client)

项目地址:module:spring-cloud-service-a2.1 创建项目创建过程同server类似,POM引用: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g...

2018-06-06 15:41:33 1152

原创 spring-cloud 第一篇: eureka 服务注册

module:spring-cloud-eureka-server1.1 添加Pom引用<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifac...

2018-06-06 15:39:02 139

原创 redis 集群启动报错:ERR Invalid node address specified: node-200:7200 (Redis::CommandError)

redis 集群启动报错:>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the cluster/opt/ruby/lib/ruby/gems/2.3.0/gems/redis-3.3.

2018-01-25 14:40:24 3135

原创 redis集群 Waiting for the cluster to join 一直等待

redis集群创建执行./redis-trib.rb create --replicas 1 XXXX:PORT1 XXXX:PORT2 ....的时候一直等待 Waiting for the cluster to join 很久都没有反应原因:redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口集群总线端口为red

2018-01-25 14:35:28 3470

原创 redis安装zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

http://blog.csdn.net/libra_ts/article/details/71195128

2018-01-24 14:06:00 1075

转载 创建redis集群报错 /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load

http://blog.csdn.net/ahzxj2012/article/details/73468119

2018-01-24 14:03:45 2132

原创 ELasticsearch 基本操作

1.创建索引PUT http://node-131:9200/people{ "settings" :{ "number_of_shareds":3, "number_of_replices":1 }, "mappings":{ "man":{ "properties":{ "name":{ "type":

2017-09-18 16:08:23 422

原创 Maven 打包可执行jar

有点时候我们项目不是通过IDEA 向导生成的spring-boot项目文件,我们直接打出的jar包,通过java -jar xxxx.jar命令执行,报出xxx.jar中没有清单属性错误,这个时候我们需要指定jar的main入口和在jar包的MANIFEST.MF文件中生成Class-Path属性, 我们修改pom.xml文件:<build> <plugins>

2017-09-08 17:27:53 978

原创 Kafka 实例

首先引入相关jar <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.0.1</version> </dependency> <

2017-09-07 19:03:41 311

原创 Kafka入门

1.简介官网简介Kafka 是一个分布式流媒体平台。 Kafka有三大关键功能:它允许我们发布和订阅记录流,这类似于消息队列或者消息传递系统。它允许我们以容错机制存储记录流它允许我们实时处理记录流Kafka 擅长于做什么呢?在系统或者应用间构建实时的数据流通道。对于数据的传输或者转换构建实时的数据流处理程序Kafka是如何工作的呢? 首先介绍几个概念:kafka 是建立在一台或

2017-09-07 18:19:44 235

原创 Centos7 安装Kafka集群

准备好三台主机: Node-131 Node-132 Node-133 下载解压:从官网下载Kafka 安装包,解压安装: tar zxvf kafka_xxx.tgz mv kafka_xxx kafka cd kafka启动Zookeeper集群zookeeper集群搭建参考之前的文章 http://blog.csdn.net/sunjiaminaini/article/deta

2017-09-05 15:54:53 2384

原创 Java的Executor框架和线程池实现原理

一 Java的Executor框架图1.Executor接口public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or in

2017-09-04 14:18:45 247

转载 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

基于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关注的人

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