写在最前:学java se GUI编程我感觉很有趣。不知道老师为什么说不要花费太多的时间在GUI编程上,“我保证java GUI你一辈子都用不上!”唐yf这句话至今还萦绕在我耳边!在他那我学到了不少东西,这是不可否认的,但是教会我思考的,却是这本书《Java语言程序设计》,梁勇著!因为胆確,一直不敢直视《Thanking in java》,从去年买到现在,正版的,还崭新的放在书架上珍藏着呢!
学到16章,明显的放慢了速度,因为难了嘛,另一个原因,几乎每个例题都是一个小案例丫,或者说一个小项目!学的很有趣味,也很有挑战性!但是,java的知识体系还很长,为了赶进度,只好舍弃精度!下学期还要实习,所以,16章共36道习题,或者说36个有趣的案例,只能写这11道题目了!并非每到题都做完,直接跳到最后一道吧!
习题16.36:编写一个程序,显示九个硬币的正面H或反面T,如图所示。当点击一个格子时,硬币就被翻面。一个格子就是一个JLabel。编写一个自定义的格子类,该类扩展JLabel且使用鼠标监听处理这些点击。当程序开始时,所有的格子都被初始化为H。
思路分析:先写一个主类,这个类继承JFrame,功能是用来显示框架的大小,位置等!其中,之类的成员属性有一个Panel,这个Panel继承JPanel。然后这个panel使用的是网格布局,用一个9x9的网格来布局。每个网格放一个Label. Label是自己定义的,继承自JLabel,默认值是显示着“H”,每当触发一个Jlabel的鼠标事件时候,label的显示内容将被修改!
好了,以上是分析的思路,也许我也会表达不清。不过也许你看代码也许会思路清晰!
-
import java.awt.BorderLayout;
-
-
import javax.swing.*;
-
/*
-
*功能:显示九个硬币,正面H或反面T,当点击一个格子时,硬币就被翻面
-
*日期:2015.4.1
-
*/
-
-
public class OpenCoin extends JFrame {
-
private CoinPanel cp = null;
-
-
public OpenCoin() {
-
cp = new CoinPanel();
-
this.add(cp, BorderLayout.CENTER);
-
}
-
-
public static void main(String[] args) {
-
OpenCoin frame = new OpenCoin();
-
frame.setTitle("翻硬币游戏");
-
frame.setSize(300, 300);
-
frame.setLocation(400, 200);
-
frame.setVisible(true);
-
}
-
}
-
import java.awt.*;
-
import javax.swing.*;
-
-
public class CoinPanel extends JPanel {
-
private CoinLabel[] jlbs = new CoinLabel[9];
-
-
public CoinPanel() {
-
this.setLayout(new GridLayout(3, 3, 1, 1));
-
-
for(int i = 0; i < 9; i++) {
-
jlbs[i] = new CoinLabel();
-
jlbs[i].setHorizontalAlignment(SwingConstants.CENTER);
-
jlbs[i].setFont(new Font("TimesRoman", Font.PLAIN, 30));
-
jlbs[i].setBorder(BorderFactory.createBevelBorder(1));
-
this.add(jlbs[i]);
-
}
-
}
-
}
-
import java.awt.event.*;
-
-
import javax.swing.*;
-
-
public class CoinLabel extends JLabel {
-
private boolean isFont = true;
-
-
public CoinLabel() {
-
this("H");
-
}
-
-
public CoinLabel(String s) {
-
super(s);
-
-
this.addMouseListener(new MouseAdapter() {
-
-
@Override
-
public void mousePressed(MouseEvent e){
-
CoinLabel.this.isFont = !CoinLabel.this.isFont;
-
-
if(isFont) {
-
CoinLabel.this.setText("H");
-
} else {
-
CoinLabel.this.setText("T");
-
}
-
}
-
});
-
}
-
}
与正在学java的童鞋共勉!
阅读(3107) | 评论(0) | 转发(0) |