手把手教你用Java打造一款简单故事书之二

开发 后端
随着移动互联网的发展,电子版的书成为现在主流,针对用户的需求,有的放矢地呈现给用户,阅读电子版书,提高他们的学习效率。

[[373730]]

上篇文章,我们介绍了故事书的理论内容,这篇文章,我们一起来看具体的代码实现。,具体教程如下。

一、项目背景

随着移动互联网的发展,电子版的书成为现在主流,针对用户的需求,有的放矢地呈现给用户,阅读电子版书,提高他们的学习效率。

二、项目目标

1.实现美观的界面。

2.能够基本实现改变字号、字体、字形、颜色、壁纸等选择,按钮页面切换功能。

3.java读取txt文件,简化代码。

三、项目实施

首先回顾上一节的手把手教你用Java打造一款简单故事书(上篇),完成界面的窗口、菜单栏、上下页的按钮,效果如下图所示。

接下来,小编带大家完成剩下的功能,具体的实现步骤如下。

(一)显示背景图,完成界面设计

1.setOpaque设置控件是否透明的,true表示不透明,false表示透明;

  1. text01.setOpaque(false); 
  2. panel01.setOpaque(false); 
  3. label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight());//设置边界 
  4. imagePanel=(JPanel)this.getContentPane();//获取窗体的内容面板 
  5. imagePanel.setOpaque(false);//设置透明 
  6. this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); 

2.把背景图添加到分层窗格的最底层;

  1. label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight());//设置边界 
  2. imagePanel=(JPanel)this.getContentPane();//获取窗体的内容面板 
  3. imagePanel.setOpaque(false);//设置透明 
  4. this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); 

效果图如下图所示:

(二)添加事件监听器MyListener(自己命名)

1.页面切换按钮功能的实现:

  1. class MyListener implements ActionListener{ 
  2. @Override 
  3. public void actionPerformed(ActionEvent e) { 
  4. // TODO Auto-generated method stub 
  5. //此处添加事件处理的代码 
  6. if(e.getSource()==btn_last){//上一页 
  7.         if(papeNum>1){//不是第一页 
  8.             papeNum--; 
  9.             btn_last.setEnabled(true); 
  10.             btn_next.setEnabled(true); 
  11.         } 
  12.         if(papeNum==1){ 
  13.             btn_last.setEnabled(false); 
  14.             btn_next.setEnabled(true); 
  15.         } 
  16. if(e.getSource()==btn_next){//下一页 
  17.         if(papeNum<str.length){//不是最后一页 
  18.             papeNum++; 
  19.             btn_last.setEnabled(true); 
  20.             btn_next.setEnabled(true); 
  21.         } 
  22.         if(papeNum==str.length){ 
  23.             btn_last.setEnabled(true); 
  24.             btn_next.setEnabled(false); 
  25.         } 
  26.    text01.setText(str[papeNum-1]); 

2.字号、字体、字形功能的实现:

  1. if(e.getSource()==twelf)//字号12 
  2.    size=12; 
  3.    if(e.getSource()==fiveteen)//字号15 
  4.    size=15; 
  5.    if(e.getSource()==eighteen)//字号18 
  6.    size=18; 
  7.    if(e.getSource()==twenty)//字号20 
  8.    size=20; 
  9.    if(e.getSource()==song)//字体宋体 
  10.    style="宋体"
  11.    if(e.getSource()==hei)//字体黑体 
  12.    style="黑体"
  13.    if(e.getSource()==kai)//字体楷体 
  14.    style="楷体"
  15.    if(e.getSource()==chang)//字形常规 
  16.    pattern=Font.PLAIN; 
  17.    if(e.getSource()==jia)//字形加粗 
  18.    pattern=Font.BOLD; 
  19.    if(e.getSource()==qing)//字形倾斜 
  20.    pattern=Font.ITALIC; 
  21.    text01.setFont(new Font(style,pattern,size)); 

3.颜色、换壁纸功能的实现:

  1. if(e.getSource()==red)//颜色红色 
  2.    text01.setForeground(Color.red); 
  3.    if(e.getSource()==green)//颜色绿色 
  4.    text01.setForeground(Color.green); 
  5.    if(e.getSource()==blue)//颜色蓝色 
  6.    text01.setForeground(Color.blue); 
  7.    
  8.    if(e.getSource()==swap){//换壁纸 
  9. photoNum++; 
  10. if(photoNum>=6) 
  11.         photoNum=1; 
  12. label.setIcon(new ImageIcon("photo//photo"+photoNum+".jpg")); 

4.程序中显示文字是以String数组形式存储,这种方式比较方便易懂,但却使得代码较多。因此,在文字较多情况下,应考虑以txt文档形式存储故事文字,在程序中读取文档内容,以显示在窗口中。

(1)读取Txt文件:在main主程序写以下代码:

  1. FileInputStream inStream0= new FileInputStream("story//s01.txt"); 
  2. FileInputStream inStream1= new FileInputStream("story//s02.txt"); 
  3. FileInputStream inStream2= new FileInputStream("story//s03.txt"); 
  4. str[0]= s.readFile(inStream0); 
  5. str[1]=s.readFile(inStream1); 
  6. str[2]=s.readFile(inStream2); 
  7. text01.setText(str[0]); 

(2)读取文件中内容的方法:

  1. public String readFile(InputStream inStream){//读取文件中的内容 
  2.  byte[] buffer =new byte[2048]; 
  3.  int hasRead=0;//已经读取的字节数 
  4.  StringBuffer sBuffer=new StringBuffer(); 
  5.  try{ 
  6.  while( (hasRead = inStream.read(buffer))!=-1){//还没有读完 
  7.          sBuffer.append(new String(buffer,0,hasRead,"GBK")); 
  8.  } 
  9.  inStream.close(); 
  10.  }catch(Exception e){ 
  11.  e.printStackTrace(); 
  12.  } 
  13.  
  14. return sBuffer.toString(); 
  15.     }      

5.标签本来是一种最简单的组件,为什么可以将它设置成为一个窗体的背景呢?

答案:(1)首先还是要了解框架JFrame中的层次结构。JFrame中的层次分布及相对关系是:最底层是JRootPane,第二层是JlayerPane,最上层就是ContentPane,也正是我们常说的内容面板。

(2)所以一般我们拖放的控件就是在ContentPane层上。也就是说我们只需将背景图片放在JFrame的第二层是JlayerPane上,再把内容面板ContentPane设置为透明,则第二层JlayerPane上放置的图片即成为内容面板的背景了。

四、总结

1.本文主要介绍了JPanel、JButton、JLabel、JTextArea、JMenu、JMenuItem等组件的基本使用,以及相应的事件处理。

2.事件处理函数的添加,难点是运用理解构造函数、内部类的创建。

 

3.代码很简单,希望能帮到你。

本文转载自微信公众号「Java进阶学习交流」,可以通过以下二维码关注。转载本文请联系Java进阶学习交流公众号。

 

责任编辑:武晓燕 来源: Java进阶学习交流
相关推荐

2023-05-22 10:04:24

2021-01-04 09:55:26

Java移动互联网

2021-02-04 15:52:46

Java考试系统

2021-02-01 08:41:06

Java考试系统

2017-09-14 09:09:04

php应用LibreOfficeWord转HTML

2022-02-17 10:26:17

JavaScript扫雷游戏前端

2021-01-10 08:14:01

Go语言TCP扫描器

2021-12-30 08:56:57

Python摸鱼倒计界面Python基础

2021-11-01 10:26:07

CanvasAPI画布技术HTML5

2021-01-21 06:04:55

Go语言TCP目录生成器

2024-01-07 20:00:27

2021-08-13 09:01:31

Python小游戏Python基础

2021-08-09 13:31:25

PythonExcel代码

2022-10-19 14:30:59

2021-01-13 09:03:48

Java游戏函数

2021-01-12 05:05:15

Java对碰游戏

2021-02-04 09:00:57

SQLDjango原生

2011-03-28 16:14:38

jQuery

2021-02-06 14:55:05

大数据pandas数据分析

2022-08-04 10:39:23

Jenkins集成CD
点赞
收藏

51CTO技术栈公众号