某储备粮的“学习笔记” - java 2012-03-09T22:49:35+08:00 Typecho http://blog.gregwym.info/feed/atom/tag/java/ <![CDATA[[Java]读取文件成字符串]]> http://blog.gregwym.info/read-file-into-string.html 2012-03-09T22:49:35+08:00 2012-03-09T22:49:35+08:00 咳嗽di小鱼 http://blog.gregwym.info String filename = "path/file.txt"; File file = new File(filename); FileInputStream fileinput = new FileInputStream(file.getAbsolutePath()); int x = fileinput.available(); byte b[] = new byte[x]; fileinput.read(b); String string = new String(b); System.out.println(string);

开始实习以后, 真的没什么自己的时间了. 学到了不少东西, 但还是老样子, 自己摸索自己成长. 长篇的理论知识整理确实重要, 但这些代码片段, 在需要的时候也是实实在在能帮上忙的东西.

闲的时间少了, 估计以后这类东西会比较多吧...


参考源: http://mcoffe.blogbus.com/logs/22801413.html

]]>
<![CDATA[Java现学现卖之Layout Managers]]> http://blog.gregwym.info/java-xian-xue-xian-mai-zhi-layout-managers.html 2011-06-24T12:29:35+08:00 2011-06-24T12:29:35+08:00 咳嗽di小鱼 http://blog.gregwym.info Java里一共提供了8种Layout Manager

  • BorderLayout
  • BoxLayout
  • CardLayout
  • FlowLayout
  • GridBagLayout
  • GridLayout
  • GroupLayout
  • SpringLayout

这其中最后两种是专门为GUI Builder设计的, 并不是很适合手动写, 我就没花时间研究, 但应该是这几种Layout Manager中, 灵活性最大的两种.

网上有人说GridBagLayout是手写UI时`功能最强大的Layout...可一般强大就是复杂的代名词, 我也把它跳过了= =`(好吧, 我确实比较懒, 但更主要是时间不够)

先说说基础,
给一个container设置Layout使用 .setLayout(LayoutManager) 这个方法.
针对不同的Layout, 添加component时候, .add()有时可能需要额外的参数

然后来说说我玩明白了的几种Layout

BorderLayout

http://download.oracle.com/javase/tutorial/figures/uiswing/layout/BorderLayoutDemo.png
这是所有content pane的默认Layout. 它将整个界面划分为PAGE_START, PAGE_END, CENTER, LINE_START, LINE_END 五个部分. 可以分别理解为一个页面的header, footer, content, left-sidebar, right-sidebar.

.add() 的时候需要在后边增加一个额外的参数, 标识这个component该被添加到哪个区域.
例: pane.add(button, BorderLayout.PAGE_END);

BoxLayout

http://download.oracle.com/javase/tutorial/figures/uiswing/layout/BoxLayoutDemo.png
这个Layout适用于单纯的将components纵向或横向直线排列. 在Constructor中, 用X_AXIS或者Y_AXIS标识排列方向.
BoxLayout本身无视components的 preferredSize, 但如果设置了maximumSize那就另当别论了. 这点在设置自适应宽度或高度的components时候, 很有用处.

BoxLayout还有两个很有用的排版小工具, 通过 .add这几个小东西, 可以很轻松的调整Layout中的空间

  • Box.createHorizontalGlue(); 水平的自动填充空间
  • Box.createRigidArea(new Dimension(width, height)); 创建一个占据多大空间的空白

Trick: RigidArea的width或者height可以为0, 而且可以添加到任意其他Layout中

FlowLayout

http://download.oracle.com/javase/tutorial/figures/uiswing/layout/FlowLayoutDemo.png
这是JPanel的默认Layout. 和Box类似, 也是把components直线排列. 区别在于, 它更智能(当然有时候太聪明不是好事儿). 可以很方便的设置

  • .setAlignment() 左/右对齐
  • .setComponentOrientation() 从左到右/从右到左
  • .setHgap() .setVgap() components之间的水平/垂直间距

GridLayout

http://download.oracle.com/javase/tutorial/figures/uiswing/layout/GridLayoutDemo.png
这个Layout就是画格子. 把一个矩形空间分成n * m的格子, 可以自适应大小, 同Flow可以设置间距.

其实还是很好用的, 但在排版中比较awkward...因为很多时候并不需要像表格一样的空间.
创建方法很简单, new GridLayout(col, row);

CardLayout

http://download.oracle.com/javase/tutorial/figures/uiswing/layout/CardLayoutDemo.png http://download.oracle.com/javase/tutorial/figures/uiswing/layout/CardLayoutDemo-2.png
啊哈哈哈...这个我的最爱啊`!
这个Layout其实就像一摞卡片, 每次你只能看到最上边的一张卡. 你可以按顺序前后切换, 也可以要求显示特定的一张, 在这次做翻页的时候非常给力!

.add() 的时候, 需要增加一个额外的String参数, 标识这个card的name, 在.show(c, name)的时候会用到
切换Card可以用.first(c) .last(c) .previous(c) .next(c)


参考资料: enter link description here

]]>
<![CDATA[这辈子写的第一个给人用的程序...]]> http://blog.gregwym.info/zhe-bei-zi-xie-de-di-yi-ge-gei-ren-yong-de-cheng-xu.html 2011-06-24T05:29:17+08:00 2011-06-24T05:29:17+08:00 咳嗽di小鱼 http://blog.gregwym.info 埋头写了3整天的code`...不用Interface Builder写GUI真是自虐啊`
不过结果还是不错的`啊哈哈哈

写的是个Twitter-like Web Service的客户端, 网页端在这里
https://hci-courses.cs.uwaterloo.ca/channelw/
不是开放注册, 但可以邀请...有人想玩玩看的话, 可以留言回复哈`
Post上来得瑟一下

Java运行文件下载:
mikrocalendar.jar

截图如下:
Channel W 截图

]]>