日期:2014-05-20  浏览次数:21012 次

求助:关于Graphics2D中drawString(String str)重叠问题
由于一个项目要在一个位置交替显示文字,现在遇到的问题是当用drawString时当第二次在此处画字符串时就会和第一次重叠。我想要的效果是:当第二次画时第一次画的字消失(也就是说第一次画的字不能影响第二次画的)。请问如何实现。

以下为代码部分
Java code
import java.awt.*;
import java.io.FileInputStream;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;


/**
 * 启动闪现屏幕
 *
 * @author dll<dll at zzti>
 */
public class Check_Frm {

    static String message = "初始化中……";
    static int sleeptime = 1000;

    public Check_Frm() {

        Splash splash = new Splash();
        //这里写初始化的内容
        message = "千山鸟飞绝";
        splash.drawInfo(message);
        sleep();
        message = "万径人踪灭";
        splash.drawInfo(message);
        sleep();

        /**
        *    此处省略代码为启动主窗体,当启动时闪屏自动消失
        */


    }

    void sleep() {//暂停
        try {
            Thread.sleep(sleeptime);
        } catch (InterruptedException ex) {
            Logger.getLogger(Check_Frm.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {//主函数
        new Check_Frm();
    }
}

class Splash {

    SplashScreen splash = SplashScreen.getSplashScreen();
    final Graphics2D g2 = splash.createGraphics();
    final Color color = g2.getBackground();
    final Dimension size = splash.getSize();
    int i = 0;

    public void drawInfo(String info) {
        mess = info;
        g2.setPaintMode();
        g2.setColor(Color.black);
        g2.setFont(new Font("华文行楷", Font.PLAIN, 15));
        g2.drawString(info, 0, 10);//每次都从这个位置(0,10)开始画字符串
        splash.update();
    }
}




------解决方案--------------------
那要重绘该图片(背景),控制好的话可以只重绘这一局部区域,然后再写新字上去。
------解决方案--------------------
另一种做法是,把图片放在底层JPanel背景,你画的时候画在上层的JPanel中,这样就不需要自己去重绘背景了。注意上层的JPanel需要设置透明。