JPanel отображать текст постепенно - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть Jpanel, где мне нужно отобразить текст, взятый из файла. Но я должен отображать текст слово за словом (одно слово в секунду). Как мне это сделать? Я попытался переопределить метод paintComponent, но он не может отображать текст постепенно ..

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Вы ищете таймер (тот, что в пакете свинг).Предполагая, что у вас есть готовая часть для разбиения по словам, следующий фрагмент псевдокода является примером того, как последовательно добавить их в JTextArea:

 ActionListener l = new ActionListener() {
     @Override
     public void actionPerformed(...) {
         textArea.append(words.remove(0));  
     }
 };
 Timer timer = new Timer(1000, l);
 timer.start();     

Если вы действительно хотите нарисовать строку вручную на пользовательскомпанель, пусть он имеет метод append и вызывает его в вашем actionListener, что-то вроде

 class MyPanel .... 
    String text;
    public void append(String word) {
        text += word;
        repaint();
    }
    @Override
    protected void paintComponent(...) {
        super.paintComponent(..);
             // draw the string
    }
 }
1 голос
/ 08 февраля 2012

возможно, это лучшие методы, но в этом случае создайте свой собственный JPanel, конечно, расширяющий JPanel, и переопределите public void paint (Graphics g) , так что вам нужна строка со всем текстом, другая Массив String, который вы можете назвать myWords, другой String, называемый currentWords, и, наконец, счетчик, который подсчитывает слова, которые вы положили

так что вам нужно сначала заполнить массив слов, что-то вроде этого может быть в конструкторе, или когда он читает файл

myWords = entireText.split(" ");

, а затем в методе рисования, внутри таймера, когда 1 секунда, вы кладете

currentWords+= myWords[counter+1];

и, наконец, вы положили

g.drawString(currentWords,0,0);

последние 0,0, это координаты X, Y, так что, возможно, вам тоже нужно будет это контролировать, чтобы поместить текст в новую строку

...