开发者社区> 问答> 正文

java新手:layout问题

这道题目:绘制文本“欢迎来到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);     
}
}

我知道有问题但是不知道怎么改,就是两段文字前后设置颜色不同,求解答啊!

展开
收起
蛮大人123 2016-03-19 17:17:46 2316 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    代码存在的问题:
    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);
        }
    }
    2019-07-17 19:08:23
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载