java新手:layout问题

这道题目:绘制文本“欢迎来到Java世界”,其中“欢迎来到”为蓝色显示,而“Java世界”为橙色显示,文本用矩形框起来,底色为黄色。
这是我的代码:
import java.awt.*;
import java.applet.*;
import java.awt.geom.*;
import java.awt.font.*;
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的区域,颜色分别是蓝色和橘色;然后分别为这两个区域设置相同的背景色。
修正代码如下:

 import java.awt.*;
import java.applet.*;
import java.awt.geom.*;
import java.awt.font.*;

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);
    }
}