Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29189
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-26 13:40
个人简介

学会谦卑和虔诚。

文章分类
文章存档

2016年(2)

2015年(2)

2014年(1)

分类: Java

2015-04-01 11:53:40

  写在最前:学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的显示内容将被修改!

  好了,以上是分析的思路,也许我也会表达不清。不过也许你看代码也许会思路清晰!
 

点击(此处)折叠或打开

  1. import java.awt.BorderLayout;

  2. import javax.swing.*;
  3. /*
  4.  *功能:显示九个硬币,正面H或反面T,当点击一个格子时,硬币就被翻面
  5.  *日期:2015.4.1
  6.  */

  7. public class OpenCoin extends JFrame {
  8.     private CoinPanel cp = null;
  9.     
  10.     public OpenCoin() {
  11.         cp = new CoinPanel();
  12.         this.add(cp, BorderLayout.CENTER);
  13.     }
  14.     
  15.     public static void main(String[] args) {
  16.         OpenCoin frame = new OpenCoin();
  17.         frame.setTitle("翻硬币游戏");
  18.         frame.setSize(300, 300);
  19.         frame.setLocation(400, 200);
  20.         frame.setVisible(true);
  21.     }
  22. }


点击(此处)折叠或打开

  1. import java.awt.*;
  2. import javax.swing.*;

  3. public class CoinPanel extends JPanel {
  4.     private CoinLabel[] jlbs = new CoinLabel[9];
  5.     
  6.     public CoinPanel() {
  7.         this.setLayout(new GridLayout(3, 3, 1, 1));

  8.         for(int i = 0; i < 9; i++) {
  9.             jlbs[i] = new CoinLabel();
  10.             jlbs[i].setHorizontalAlignment(SwingConstants.CENTER);
  11.             jlbs[i].setFont(new Font("TimesRoman", Font.PLAIN, 30));
  12.             jlbs[i].setBorder(BorderFactory.createBevelBorder(1));
  13.             this.add(jlbs[i]);
  14.         }
  15.     }
  16. }


点击(此处)折叠或打开

  1. import java.awt.event.*;

  2. import javax.swing.*;

  3. public class CoinLabel extends JLabel {
  4.     private boolean isFont = true;
  5.     
  6.     public CoinLabel() {
  7.         this("H");
  8.     }
  9.     
  10.     public CoinLabel(String s) {
  11.         super(s);
  12.         
  13.         this.addMouseListener(new MouseAdapter() {
  14.             
  15.             @Override
  16.             public void mousePressed(MouseEvent e){
  17.                 CoinLabel.this.isFont = !CoinLabel.this.isFont;
  18.                 
  19.                 if(isFont) {
  20.                     CoinLabel.this.setText("H");
  21.                 } else {
  22.                     CoinLabel.this.setText("T");
  23.                 }
  24.             }
  25.         });
  26.     }
  27. }

   与正在学java的童鞋共勉!
阅读(3061) | 评论(0) | 转发(0) |
3

上一篇:约瑟夫问题

下一篇:Java se项目:记事本

给主人留下些什么吧!~~