Java可以在图形文件的背景中显示文本吗?

时间:2016-06-14 21:32:50

标签: java swing animation graphics

我有这个代码,它应该让文字“简单动画”以旋转的颜色滚动屏幕。现在,它确实如此,但即使在文本移动之后,颜色仍然存在。我想知道是否有办法让背景中的文字。例如,我以为我可以打印出完全相同的“简单动画”,但颜色与背景颜色相同,实际文本后面约10个像素。然而,当我尝试这个时,白色文字(这是背景颜色)只是覆盖了旋转的颜色。如果我可以有背景文本,我尝试使用谷歌搜索,但从我读到,背景可以做的唯一事情就是设置颜色。那么,有没有办法在Java Graphics文件的后台使用文本?

这是我的代码:

       import java.awt.Graphics;
       import java.awt.Color;
       import java.awt.Font;
       import javax.swing.*;

public class Scrolling_Sign extends JApplet implements Runnable {
 String mesag = "Simple Animation";
  Font f = new Font("Bauhaus 93",Font.BOLD,72);
  Color colors[] = new Color[100000];
  Thread runThread;
    int Xposition = 600;      

  public void init()  {    
     setBackground(Color.white);
  }

  public void start() {
     if (runThread == null) {
        runThread = new Thread(this);
        runThread.start();
    }
  }
  public void stop() {
     if (runThread != null) {
        runThread.stop();
        runThread = null;
     }

  }

  public void run() {   
     float c = 0;      

     for (int i = 0; i < colors.length; i++) {
        colors[i] = Color.getHSBColor(c, (float)1.0,(float)1.0);            

        c += .02;   

     }



     int i = 0;
     while (true) {
        setForeground(colors[i]);

        repaint();
        i++;

        try { Thread.sleep(100); }
           catch (InterruptedException e) { }
        if (i == colors.length ) i = 0;
     }

  }
  public void paint(Graphics g) {

     g.setFont(f);
        g.drawString(mesag,Xposition,100);
     Xposition--;
     if (Xposition < -290)  {

        Xposition = 600;

     }

  }

}

谢谢!

1 个答案:

答案 0 :(得分:2)

建议:

  1. 永远不要直接在JApplet或其他顶级窗口中绘制。
  2. 而是在applet中显示的JPanel的paintComponent中绘制。 Swing教程将向您展示如何。
  3. 请务必在覆盖范围内调用super.paintComponent(g)方法,然后再次阅读Swing tutorials以了解原因。有关更多教程,请参阅:Swing Info
  4. 这是Swing - 使用Swing Timer来驱动你的动画,而不是线程。
  5. 如果您曾使用过线程,从不调用Thread#stop()或使用任何其他已弃用的方法。请阅读Why is Thread.stop deprecated?
  6. 请查看this answer以获取使用Swing Timer的Swing动画示例。
  7. 除非这是一个类赋值,否则不要创建JApplet,因为这是一种死技术,甚至Oracle都会告诉你。
  8. 要在后台显示文本,请使用java.awt.Graphics方法编写文本:drawString(...)。或者将JLabel放在背景图像上。