2012-08-09 4 views
-1

Мне нужно придумать способ сделать три большие буквы похожими на то, что они набираются/записываются. Я могу создать Письма с paintComponent();Как создать симуляцию письма с помощью java?

Мне нужны идеи/пример о том, как это сделать?

Это то, что я уже сделал.

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

Вы имеете в виду, набираясь? Или речь идет о почерке? –

+0

Я имею в виду набираю. – michdraft

+2

Кроме того, как насчет того, чтобы объяснить хотя бы немного, что вы уже пробовали и почему не сработали или почему это не желаемый результат. Просто придя сюда, чтобы получить идеи/примеры, не предоставляя свои, может заставить некоторых людей думать, что вы ленивы/не заинтересованы, так почему другие должны делать наименьшую вещь, даже вы не можете/не будете делать? Не пытайтесь быть грубым здесь или что-то еще, просто пытаясь помочь вам получить лучшие ответы и в то же время предоставить хорошие вопросы. – Acapulco

ответ

1

Некоторые идеи:

  • делают видео и играть в нее (то же самое с .gif, например)

  • расколоть письмо в мелкие кусочки и покрасить эти куски один за другим

  • определите путь и пусть «карандаш» нарисует себя на динамически создаваемом изображении

+0

это в java, вы имеете в виду? – michdraft

+0

Несомненно это можно сделать с помощью java – Kostronor

+0

Как вы относитесь к созданию видео. вы подразумеваете захват видео, когда я пишу алфавит A своей рукой? – itro

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

+0

Как я могу позволить, чтобы это было похоже на то, что кто-то рушит рукой, а значит, с анимацией? – michdraft

4

Если вы действительно хотите, чтобы отобразить текст, который имитирует, как будто кто-то печатает, для этой цели вы можете использовать javax.swing.Timer и просто использовать JLabel, чтобы отобразить текст на 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(); 
      } 
     }); 
    } 
} 
+0

Спасибо за ваш ответ, ваш класс очень хорош для ввода слова или предложения, но не подходит для письма типа «A». Я хочу, чтобы только один алфавит, такой как A с размером 500, набирался так же, как вы делаете с вашей рукой. – michdraft

+0

Ahha, если я хочу, чтобы вы писали, вы хотите, когда вы пишете на куске бумаги, так же, как персонаж должен появляться на экране медленно, а не один персонаж, идущий за один ход, только часть его должна приходите, как будто вы пишете его ручкой или карандашом. Я прямо сейчас, что вы ожидаете? –

+0

Да, вы объяснили это именно тем, что я имею в виду. – itro