众所周知, extjs非常强大, 可以把网页做成类似桌面应用的效果, 类似webqq. 但是用起来也确实很麻烦, 新建一个窗口,得写一堆js代码.
而easyui 功能也十分强大, 用起来挺方便的, 新建一个window, 只需要写一个div 设置类为 easyui-window 即可, 而新建一课树,只需要设置class为easyui-tree, 树的级别(深度)由ul li来控制, 非常简单. 并且强大的datagrid, 可以从远端服务器直接获取数据(要求是json格式文本),生成表格. 具体实例传送门:http://www.zi-han.net/case/easyui/
首先下载源码:
git clone https://github.com/douglascrockford/JSON-java
这个git居然没有build.xml, 编译很麻烦, 得自己写个build.xml. 我的build.xml为
<project basedir="." name="json" default="release"> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="class.dir" value="${build.dir}/classes"/> <property name="jar.dir" value="${build.dir}/jar"/> <property name="lib.dir" value="lib"/> <target name="prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${class.dir}"/> <mkdir dir="${jar.dir}"/> <mkdir dir="${lib.dir}"/> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${class.dir}"/> </target> <target name="jar" depends="compile"> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${class.dir}"> </jar> </target> <target name="clean" depends="prepare, compile, jar"> <delete dir="${build.dir}"/> </target> <target name="release" depends="jar"> <copy file="${jar.dir}/${ant.project.name}.jar" todir="${lib.dir}"/> </target> </project>
记得把这个build.xml放入JSON的根目录下,然后运行ant就编译好了. 下面测试下 新建一个目录test, 在test下有目录src, lib, 把刚刚编译的json.jar 复制到这个lib下. 然后写一个测试java文件放入src下,代码为:
import java.util.*; import java.io.*; import org.json.*; class Bean { private int id; private String name; public Bean(){ id = 0; name = "Mary"; } public int getId() { return id; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public String toString() { StringBuilder s = new StringBuilder(); s.append(id); s.append(":"); s.append(name); return s.toString(); } } public class Test { public static void main(String[] args) throws Exception { String s = new JSONObject().put("JSON", "Hello, World!").toString(); System.out.println(s); Bean b = new Bean(); b.setId(100); b.setName("Mary"); System.out.println(new JSONObject(b)); HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); JSONObject json = new JSONObject(map); json.accumulate("c", 4); System.out.println(json); json = new JSONObject("{'a':{'a':4}}"); System.out.println(json); JSONStringer js = new JSONStringer(); System.out.println(js.object().key("name").value("Mary").endObject()); } }
在test根目录下写一个build.xml, 内容如下:
<project name="Test" basedir="." default="run"> <property name="build.dir" value="build"/> <property name="lib.dir" value="lib"/> <property name="src.dir" value="src"/> <property name="class.dir" value="${build.dir}/classes"/> <property name="jar.dir" value="${build.dir}/jar"/> <property name="main-class" value="Test"/> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar"/> </path> <target name="prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${class.dir}"/> <mkdir dir="${jar.dir}"/> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${class.dir}" classpathref="classpath"/> </target> <target name="jar" depends="compile"> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${class.dir}"> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target> <target name="run" depends="jar"> <java fork="true" classname="${main-class}"> <classpath> <path refid="classpath"/> <path location="${jar.dir}/${ant.project.name}.jar"/> </classpath> </java> </target> </project>
运行ant就可以看到结果了... json包中两个最常用的就是JSONObject和JSONArray对象,望文生义,不需解释.
另外JSONStringer 和JSONTokener 也是有用的工具,具体实例传送门:http://blog.csdn.net/xiazdong/article/details/7059573
另外有个问题, JSONObject有一个构造方法是可以把一个java bean转化为JSONObject对象,我的bean为:
class Bean { private int id; private String name; public Bean(){ id = 0; name = "Mary"; } public int getId() { return id; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public String toString() { StringBuilder s = new StringBuilder(); s.append(id); s.append(":"); s.append(name); return s.toString(); } }
new 一个Bean后,传进去,不知为什么返回的是{},即一个空json, 不知道什么原因.
sublime编辑器(差点记成subline #!)据说很强大,查看这篇文章http://www.iplaysoft.com/sublimetext.html。
吸引我的一点是支持vim模式, 于是很兴奋的安装了。 确实初次使用感觉挺清新的,支持快捷输入,比如java的System.out.println()函数只需输入pl,而且很高效的文件切换,只需输入ctrl+p,再输入文件名(不是全名,只要是能够区分其他文件名,比如只有一个文件,有a字母命名,只需要输入a,自动切换到该文件,回车都不需要输。 还有就是代码高亮、多行输入(同时给多行加上前缀特别有用)、折叠等等。还有就是文本地图(就是打开文件的缩略图)、强大的命令、自由方便的配置等。
但是,仍有许多不足,我是习惯了vim的,基本的vim操作都支持,比如删除d,移动光标等,但是很多特别常用的不支持,比如删除空白行:%g/^$/d 替换:%s/a/A/gc等,还有不支持q退出。平时的:wq无效。 所以还是很难以接受过来的。如果sublime和vim能够完美结合,应该是个不错的。
Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。各种过渡效果、滚动、对话框、轮播等都有现成的组件可以调用,非常方便。less(不要将linux命令less弄混淆了)语言将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行。
bootstrap传送门:http://www.bootcss.com/
zh_CN.UTF-8 UTF-8 en_US.UTF-8 UTF-8 zh_CN.GBK GBK zh_CN.GB2312 GB2312
sudo dpkg-reconfigure locales
set fileencodings=utf-8,gbk,gb2312
#include <stdio.h> int main(int argc, char **argv) { printf("HelloWorld\n"); return 0; }
测试下, 看下效果!