这道题目:绘制文本“欢迎来到Java世界”,其中“欢迎来到”为蓝色显示,而“Java世界”为橙色显示,文本用矩形框起来,底色为黄色。
这是我的代码:
public class Rect extends Applet
{
public void paint(Graphics oldg)
{
Graphics2D g=(Graphics2D)oldg;
Font f=new Font("Courier",Font.BOLD,18);
FontRenderContext frc = g.getFontRenderContext();
String str1=new String("欢迎来到");
String str2=new String("java世界");
String str=str1+str2;
Point2D loc=new Point2D.Float(40,40);
g.setColor(Color.blue);
TextLayout layout=new TextLayout(str1,f,frc);
g.setColor(Color.orange);
layout=new TextLayout(str2,f,frc);
layout=new TextLayout(str,f,frc);
layout.draw(g, (float)loc.getX(), (float)loc.getY());
Rectangle2D bounds = layout.getBounds();
bounds.setRect(bounds.getX()+loc.getX(),
bounds.getY()+loc.getY(),
bounds.getWidth(),
bounds.getHeight());
Color c=new Color(255,255,0,110);
g.setColor(c);
g.fill(bounds);
}
}
我知道有问题但是不知道怎么改,就是两段文字前后设置颜色不同,求解答啊!
代码存在的问题:
1 两次g.SetColor(),那么后面一次赋值成黄色的代码将覆盖前面的蓝色;
2 layout连续两行new操作赋值,那么后面一行将覆盖前面一行,本质上你只定义了一个str的layout输出的是整个“欢迎来到java世界"的长字符串。
你应该定义两个Layout分别对应你的str1和str2的区域,颜色分别是蓝色和橘色;然后分别为这两个区域设置相同的背景色。
修正代码如下:
public class Rect extends Applet {
public void paint(Graphics oldg) {
Graphics2D g = (Graphics2D) oldg;
Font f = new Font("Courier", Font.BOLD, 18);
FontRenderContext frc = g.getFontRenderContext();
//第一个文本区域
String str1 = new String("欢迎来到");
Point2D loc1 = new Point2D.Float(40, 40);
TextLayout layout1 = new TextLayout(str1, f, frc);
layout1 = new TextLayout(str1, f, frc);
g.setColor(Color.orange);
layout1.draw(g, (float) loc1.getX(), (float) loc1.getY());
//第二个文本区域
String str2 = new String("java世界");
Point2D loc2 = new Point2D.Float(120, 40);
TextLayout layout2 = new TextLayout(str2, f, frc);
g.setColor(Color.blue);
layout2.draw(g, (float) loc2.getX(), (float) loc2.getY());
//绘制第一个文本区域的背景
Rectangle2D bounds = layout1.getBounds();
bounds.setRect(bounds.getX() + loc1.getX(), bounds.getY() + loc1.getY(), bounds.getWidth(), bounds.getHeight());
Color c = new Color(255, 255, 0, 110);
g.setColor(c);
g.fill(bounds);
//绘制第二个文本区域的背景
bounds = layout2.getBounds();
bounds.setRect(bounds.getX() + loc2.getX(), bounds.getY() + loc2.getY(), bounds.getWidth(), bounds.getHeight());
g.setColor(c);
g.fill(bounds);
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。