展开全部

import java.awt.Color;

import java.awt.Font;

import java.awt.GradientPaint;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.geom.AffineTransform;

import java.awt.image.AffineTransformOp;

import java.awt.image.BufferedImage;

import java.io.BufferedReader;

import java.io.StringReader;

import java.util.ArrayList;

import javax.swing.JFrame;

import javax.swing.JLabel;

public class PoetryTest {

public static void main(String[] args) throws Exception {

final JFrame f = new JFrame();

final ArrayList ps = PContents.load();

final PoetryLabel plabel = new PoetryLabel();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.add(plabel);

f.setSize(320,268);

f.setLocationRelativeTo(null);

f.setVisible(true);

plabel.setPoetry(ps.get(0));

f.setTitle(plabel.getTitle()+"-"+plabel.getAuthor());

plabel.addMouseListener(new MouseAdapter(){

int index;

public void mouseClicked(MouseEvent e){

++index;

index=index%ps.size();

Poetry p = ps.get(index);

plabel.setPoetry(p);

f.setTitle(plabel.getTitle()+"-"+plabel.getAuthor());

}

});

}

}

//呈现诗歌的标签类

class PoetryLabel extends JLabel{

private static final Color tColor = Color.white;//标题颜色

private static final Color aColor = Color.yellow;//作者颜色

private static final Color cColor = Color.LIGHT_GRAY;//内容颜色

private static final int fontSize=16;//字体大小e68a84e8a2ad62616964757a686964616f31333236613462

private static final int tType = Font.BOLD;//标题字体样式为粗体

private static final int aType = Font.ITALIC;//作者字体样式为斜体

private static final int cType = Font.PLAIN;//内容字体样式为普通样式

private static final float scaleFactor = 1.2f;//标题字体大小比其它字体大

private static final String fontName="SimSun";//字体名称

private static final int offset=5,space=5;

private Font font;

private AffineTransform at;

private Poetry poem;

public PoetryLabel(){

this.poem=new Poetry();

this.font=new Font(fontName,cType,fontSize);

this.setHorizontalAlignment(JLabel.CENTER);

this.setVerticalAlignment(JLabel.CENTER);

at = new AffineTransform();

at.setToRotation(Math.toRadians(-90));

font = font.deriveFont(at);//将字体逆时针旋转90°

}

public Poetry getPoetry() {

return poem;

}

//设置诗歌,来初始化标签内容

public void setPoetry(Poetry s){

this.poem=s;

this.repaint();

}

public String getTitle(){return poem.title;}

public String getAuthor(){return poem.author;}

//创建图像,先将逆时针旋转了90°的文件画上,然后将整幅图像顺时针旋转90°

private Image createImage(){

int x;

int y=offset;

int w = getTWidth(poem);

int h = getTHeight(poem);

BufferedImage img = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);

Graphics2D g = img.createGraphics();

//draw title

g.setColor(tColor);

Font tfont = font.deriveFont(font.getSize()*scaleFactor).deriveFont(tType);

g.setFont(tfont);

y+=tfont.getSize();

char[] cs = poem.title.toCharArray();

for(int i=0; i

x=(i+1)*(tfont.getSize()+space)+offset;

g.drawChars(cs, i, 1, x, y);

}

//draw author

y+=space*2+tfont.getSize();

cs = poem.author.toCharArray();

tfont = font.deriveFont(aType);

g.setColor(aColor);

g.setFont(tfont);

for(int i=0; i

x=(i+1)*(tfont.getSize()+space)+offset;

g.drawChars(cs, i, 1, x, y);

}

//draw contents

y+=space*3;

g.setColor(cColor);

g.setFont(font);

for(int i=0; i

y+=fontSize+space;

cs = poem.contents.get(i).toCharArray();

for(int j=0; j

x=(j+1)*(tfont.getSize()+space)+offset;

g.drawChars(cs, j, 1, x, y);

}

}

g.dispose();

return this.getRotateImage(img);

}

//将图像顺时针旋转90°

private Image getRotateImage(final BufferedImage img) {

int w = img.getWidth();

int h = img.getHeight();

BufferedImage newImg = new BufferedImage(h,w,2);

AffineTransformOp op = new AffineTransformOp(AffineTransform.

getRotateInstance(Math.toRadians(90),h/2,h/2),null);

return op.filter(img,newImg);

}

//绘图

public void paint(Graphics gg){

BufferedImage img = (BufferedImage)this.createImage();

int iw = img.getWidth();

int ih = img.getHeight();

Graphics2D g = (Graphics2D)gg;

int w = this.getWidth();

int h = this.getHeight();

g.setPaint(new GradientPaint(0,0,Color.DARK_GRAY,0,h,Color.black));

g.fillRect(0,0,w,h);

int x = (w-iw)/2;

int y = (h-ih)/2;

g.drawImage(img, x, y, this);

g.dispose();

}

//计算图片的高度

private int getTHeight(Poetry s) {

int h = offset*2+space*5;

h+=(int)(fontSize*(scaleFactor+1));

h+=(fontSize+space*2)*s.contents.size();

return h;

}

//计算图片的宽度

private int getTWidth(Poetry s) {

int tl = (int)(s.title.length()*(fontSize*scaleFactor+space)+offset*2);

int al = s.author.length()*(fontSize+space)+offset*2;

int t;

int max = tl>al?tl:al;

for(int i=0; i

t = s.contents.get(i).length()*(fontSize+space)+offset*2;

max=max>t?max:t;

}

return max;

}

}

//诗歌类

class Poetry{

public String title;//标题

public String author;//作者

public ArrayList contents=new ArrayList();//内容

public void addLine(String s){this.contents.add(s);}//加入一行内容

}

//

class PContents{

public static String s=

"苏武庙\r\n"+

"温庭筠\r\n"+

"苏武魂销汉使前,\r\n"+

"古祠高树两茫然。\r\n"+

"云边雁断胡天月,\r\n"+

"陇上羊归塞草烟。\r\n"+

"回日楼台非甲帐,\r\n"+

"去时冠剑是丁年。\r\n"+

"茂陵不见封侯印,\r\n"+

"空向秋波哭逝川。\r\n"+

"\r\n"+

"贫女\r\n"+

"秦韬玉\r\n"+

"蓬门未识绮罗香,\r\n"+

"拟托良媒益自伤。\r\n"+

"谁爱风流高格调?\r\n"+

"共怜时世俭梳妆。\r\n"+

"敢将十指夸针巧,\r\n"+

"不把双眉斗画长。\r\n"+

"苦恨年年压金线,\r\n"+

"为他人作嫁衣裳。\r\n"+

"\r\n"+

"宫词\r\n"+

"薛逢\r\n"+

"十二楼中尽晓妆,\r\n"+

"望仙楼上望君王。\r\n"+

"锁衔金兽连环冷,\r\n"+

"水滴铜龙昼漏长。\r\n"+

"云髻罢梳还对镜,\r\n"+

"罗衣欲换更添香。\r\n"+

"遥窥正殿帘开处,\r\n"+

"袍裤宫人扫御床。\r\n"+

"\r\n"+

"利洲南渡\r\n"+

"温庭筠\r\n"+

"澹然空水对斜晖,\r\n"+

"曲岛苍茫接翠微。\r\n"+

"波上马嘶看棹去,\r\n"+

"柳边人歇待船归。\r\n"+

"数丛沙草群鸥散,\r\n"+

"万顷江田一鹭飞。\r\n"+

"谁解乘舟寻范蠡,\r\n"+

"五湖烟水独忘机?\r\n"+

"\r\n"+

"无题二首之一\r\n"+

"李商隐\r\n"+

"凤尾香罗薄几重,\r\n"+

"碧文圆顶夜深缝。\r\n"+

"扇裁月魄羞难掩,\r\n"+

"车走雷声语未通。\r\n"+

"曾是寂寥金烬暗,\r\n"+

"断无消息石榴红。\r\n"+

"斑骓只系垂杨岸,\r\n"+

"何处西南任好风?\r\n"+

"\r\n"+

"无题二首之二\r\n"+

"李商隐\r\n"+

"重帷深下莫愁堂,\r\n"+

"卧后清宵细细长。\r\n"+

"神女生涯原是梦,\r\n"+

"小姑居处本无郎。\r\n"+

"风波不信菱枝弱,\r\n"+

"月露谁教桂叶香?\r\n"+

"直道相思了无益,\r\n"+

"未妨惆怅是清狂。\r\n"+

"\r\n"+

"金陵图\r\n"+

"韦庄\r\n"+

"江雨霏霏江草齐,\r\n"+

"六朝如梦鸟空啼。\r\n"+

"无情最是台城柳,\r\n"+

"依旧烟笼十里堤。\r\n" +

"\r\n"

;

public static ArrayList load() throws Exception{

ArrayList list = new ArrayList();

BufferedReader br = new BufferedReader(new StringReader(s));

Poetry p = null;

String t = null;

while((t = br.readLine()) != null){

if(p==null)

p=new Poetry();

if(t.isEmpty()){

list.add(p);

p=null;

}

else if(p.title==null)

p.title=t;

else if(p.author==null)

p.author=t;

else

p.addLine(t);

}

return list;

}

}

本回答由提问者推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java将古诗竖排_写一个java程序 将一首古诗竖着排序从右往左读相关推荐

  1. java单链表例子_写一个java链表的例子?随便举例说一下。

    展开全部 //单链表类 package dataStructure.linearList; import dataStructure.linearList.Node; //导入单链表结点类 impor ...

  2. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  3. C语言_写一个关机程序,只要程序运行起来,电脑在1分钟内关机。

    写一个关机程序,只要程序运行起来,电脑在1分钟内关机, //如果输入:"我是猪,才取消关机\n") 代码如下(示例): #include <string.h> #inc ...

  4. java结果分行显示_编写一个java程序。分行显示自己的姓名,地址,电话!用Test.java命名。_学小易找答案...

    [单选题]16.骨骼肌进行完全强直收缩时,相邻两次刺激的时间间隔应 [填空题]实习岗位名称 [单选题]神经调节的基本方式是: [单选题]Thank you for your nice gifts. - ...

  5. java输入字符串异常_设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。...

    设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为"XYZ",则抛出一个异常信息"This is a XYZ",如果从命令 ...

  6. java 多线程 卖票_编写一个Java 多线程程序,完成三个售票窗口同时出售20张票(如下图所示);...

    编写一个Java 多线程程序,完成三个售票窗口同时出售20张票(如下图所示); 程序分析:(1)票数要使用同一个静态值: (2)为保证不会出现卖出同一个票数,要java多线程同步锁. 设计思路: (1 ...

  7. java编写salary函数_编写一个Java程序,在程序中包含一个Employee类,Employee类包含name、age、salary三个成员变量...

    编写一个Java程序,在程序中包含一个Employee类,Employee类包含name.age.salary三个成员变量,Employee类中有4个构造方法,分别为无参的.带一个参数用来对name属 ...

  8. java 64内存不足_请教一个 Java 内存占用的问题

    第 1 条附言  ·  364 天前 2020-03-04 01:08:55.525 [HikariPool-1 housekeeper] WARN c.z.hikari.pool.HikariPoo ...

  9. java 数据立方_写一个Java应用程序,从键盘输入一个整数,然后输出它的平方值立方值...

    这是一个跟输入/输出流有关的面试题.下面我们来分析怎么实现该功能. 解析:在java中没有像C语言那样有一个专供接收从键盘输入值的scanf函数,所以一般的做法是从键盘输入一行字符,保存到字符串s中, ...

最新文章

  1. win7 修改hosts 不起作用
  2. 【偶尔一道ctf】xctf adword mobile easy-apk
  3. 项目分析(map复习)
  4. spark的python开发安装方式_python 安装spark_Spark环境搭建 (Python)
  5. macpro台式计算机,Mac Pro正式上架 真的可以用来刨土豆丝
  6. linux数字雨代码解释,linux提权 漏洞合集 linux-kernel-exploits
  7. SpringBoot + Vue 开发前后端分离的旅游管理系统
  8. php执行js加密解密
  9. vue2整合echarts5.0
  10. 怎么用软件测试iPad,Apple:如何在iphone、ipad上安装一些常用命令行命令
  11. 4000字 Python 必读指南
  12. 《工程伦理与学术道德》第四章习题
  13. 数据库连接池种类、C3P0数据库连接池、德鲁伊数据库连接池
  14. java过滤器filter过滤相同url时的执行顺序
  15. 发那科机器人回原位置先上升_机器人小知识 | 发那科机器人位置信息修改介绍...
  16. ​12864无字库液晶显示(一)
  17. JAVA梅森旋转随机算法_伪随机数生成算法-梅森旋转(Mersenne Twister/MT)
  18. 苹果6换android系统更新不了,iPhone6的手机系统是什么?iPhone6能升级安卓4.4吗?...
  19. 计算机理论基础知识书面形式,计算机基础知识word.doc
  20. 生命中不仅仅只有代码

热门文章

  1. 女生应该找个有独立博客的男朋友
  2. tomcat mysql密码_Tomcat登陆mysql的密码设置
  3. keras 一维残差神经网络(1D-ResNet)和一维深度残差收缩网络(1D-DRSN)
  4. HVR refresh的机制
  5. DDR3内存详解,存储器结构+时序+初始化过程
  6. 微信小程序开发 - 五星好评
  7. shell实现毫秒级时钟
  8. DNS基本概念报文格式
  9. iTunes Connect新创建 App
  10. 不怕生错命,就怕起错名:起名的4个误区