Programming 板


LINE

※ 引述《costbook (CB)》之铭言: : 因为专题需要写GUI的程式,所以我就 : 把JAVA的书拿出来,翻开老是被我跳过的 : GUI章节,好像是在讲swing吧... : 然後看着看着...就睡着了,真的是无聊 : 又繁琐啊... : 现在只搞出一个frame和一个button : 幸好没流口水到书上 swing的用法还蛮简单的 (当然撇开了细节的部分) 反正你就是弄一个TOPLEVEL Widget出来就对了 写application大概就是JFrame ============================================================ :: import javax.swing.JFrame; public class Sample extends JFrame { public Sample() { this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setSize(400, 300); this.setTitle("TOPLEVEL widget"); this.setVisible(true); } public static void main(String[] args){ new Sample(); } } ============================================================ :: 有了JFrame就可以用他旳ContentPane Q: 为什麽要用ContentPane? A: 因为Swing JFrame的LayoutManager是用在这个"薄薄的一片之上的" 虽然看不见,但是他的好你会明白的 (toplevel widget不是light-weight widget所以会有pane的结构) (其他的元件也就是非heavy-weight widget则靠其他用 Container性质的物件来管理,通常会是JPanel或其他Pane-like物件) ============================================================ :: import java.awt.Container; import java.awt.GridLayout; import javax.swing.JFrame; public class Sample extends JFrame { Container placeholder; public Sample() { /* choice layout */ this.placeholder = this.getContentPane(); placeholder.setLayout(new GridLayout(3, 3)); /* basic settings */ this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setSize(400, 300); this.setTitle("TOPLEVEL widget"); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } ============================================================ :: 把最底层的layout方式决定好之後,就算是打好了"游乐场"的地基了。 是该玩点什麽。你可以加入任何元件在JFrame之上,呼叫add method即可 ============================================================ :: import java.awt.Container; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Sample extends JFrame { Container placeholder; public Sample() { /* choice layout */ this.placeholder = this.getContentPane(); placeholder.setLayout(new GridLayout(3, 3)); /* add some widget */ JButton[] b = new JButton[9]; for (int i = 0; i < 9; i++) { b[i] = new JButton(""); this.add(b[i]); } /* basic settings */ this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setSize(400, 300); this.setTitle("TOPLEVEL widget"); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } ============================================================ :: 新增了9个按钮在上面,但是按了也没什麽事发生。 为了让他动起来,你还需要学习事件处理。 针对於JButton常用的是ActionListener介面,所有的Event Listener都是介面 因为他保留了实作的空间让你决定,收到该event notification要做些什麽? ActionListener只有一个mehtod (http://0rz.net/3c1HC) void actionPerformed(ActionEvent e) Invoked when an action occurs. 所以你只要覆写这一个method,就有一个能用的ActionListener了。 FAQ : 其他的Listener有很多方法,但又不是每一个方法都有用到。 这时候我们可以使用Adapter。Adapter简单说就是一个转接插头。 把三脚的插头转成二脚了 (概念上是如此^^) 列几个例子: MouseListener <--> MouseAdapter KeyListener <--> KeyAdapter *. 如果你用了Adapter却什麽也没发生, 那肯定是你method不match父类别的method 或是压根就没有加在widget上 ============================================================ :: import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class Sample extends JFrame { Container placeholder; public Sample() { /* choice layout */ this.placeholder = this.getContentPane(); placeholder.setLayout(new GridLayout(3, 3)); /* add some widget */ JButton[] b = new JButton[9]; for (int i = 0; i < 9; i++) { b[i] = new JButton(""); b[i].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { JButton b =(JButton) e.getSource(); b.setText("has been clicked"); }}); this.add(b[i]); } /* basic settings */ this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setSize(400, 300); this.setTitle("TOPLEVEL widget"); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } ============================================================ :: 基本上swing入门就这样而已噜 其中您还需要的基本知识就是其他的... Layout Manager Listener light-weight Container or likely container (JPanel; JSplitPane ...) other widgets 这些排列组合起来用就绰绰有余 ============================================================ :: 深入一点,你要先有MVC(隐藏了Observer)的概念。 再来学JTable JList会比较容易上手 最後还有闲的话,可以看看Swing的其他Feature。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.59.94.161







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP