-1

我需要想出一种方法,让三个大字母看起来像是在打字/书写。我可以用paintComponent();

我需要有关如何实现此目的的想法/示例?

这是我已经做过的。

public class LetterWriter extends JPanel {
   private String[] alphabets;
private Font font;

public LetterWriter() {
    createComponents();
    layoutComponents();
}

public void createComponents() {
    alphabets = new String[]{"A","B","C"};
    String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
    font = new Font(fonts[7],1,500);
}

public void layoutComponents() {
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g.create();
    g2d.setFont(font);
    g2d.drawString(alphabets[0],getWidth()/7,getHeight()-50);
}

public static void main(String[] args) {
    LetterWriter demo = new LetterWriter();
    JFrame frame = new JFrame();
    Container cp = frame.getContentPane();
    cp.add(demo);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setLocation(500, 500);
    frame.setVisible(true);
}
}  
4

3 回答 3

4

如果你真的想显示文本,就像有人在打字一样,你可以使用javax.swing.Timer,为此,只需使用 aJLabel来显示文本JPanel而不是在 上绘制它JPanel,因为在绘制时,您必须担心字体度量和所述字符在给定位置的放置,这可能很麻烦。虽然如果您打算做一些与我在这里介绍的不同的事情,请同样回复。

这是一个示例代码供您参考:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TypingLetters
{
    private String text;
    private JLabel letterLabel;
    private int counter = 0;
    private Timer timer;
    private ActionListener timerAction = new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            if (counter <= text.length())
            {
                letterLabel.setText(text.substring(0, counter));
                counter++;
            }
            else
                timer.stop();
        }
    };

    public TypingLetters()
    {
        text = "A long text that I want to" +
                    " appear as being TYPED :-)";
    }

    private void displayGUI()
    {
        JFrame frame = new JFrame("Typing Letters Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        letterLabel = new JLabel();
        contentPane.add(letterLabel);

        frame.setContentPane(contentPane);
        frame.setSize(500, 200);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
        timer = new Timer(250, timerAction);
        timer.start();
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new TypingLetters().displayGUI();
            }
        });
    }
}
于 2012-08-09T17:34:03.093 回答
1

一些想法:

  • 制作视频并播放(例如,与 .gif 相同)

  • 把信分成小块,然后把这些小块一个接一个地涂上

  • 定义路径并让“铅笔”在动态创建的图像上绘制自己

于 2012-08-09T17:12:01.787 回答
1

选项1:

  1. 在一张纸上绘制图像
  2. 拍一张照片保存到你的电脑里
  3. 使用 g.drawImage("TheImageYouTook",0,0,sizex,sizey);

选项 2:

您可以选择 java 字体,但这会有点复杂,如果上述选项不适合您,请参阅此页面,http://docs.oracle.com/javase/6/docs/api/java/awt/Font。 html

于 2012-08-09T17:12:05.240 回答