Swing/SmoothScroll のバックアップソース(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/SmoothScroll へ行く。
TITLE:JTextAreaでSmoothScrollによる行移動 #navi(../) *JTextAreaでSmoothScrollによる行移動 [#qdf0c9e9] >編集者:[[Terai Atsuhiro>terai]]~ 作成日:2007-08-13~ 更新日:&lastmod; #contents **概要 [#bcc95e88] SmoothScrollアニメーション有りで任意の行まで移動します。 #screenshot **サンプルコード [#u2a76de6] #code{{ Document doc = textArea.getDocument(); Element root = doc.getDefaultRootElement(); int ln = getDestLineNumber(textField, root); if(ln<0) { Toolkit.getDefaultToolkit().beep(); return; } try{ final Element elem = root.getElement(ln-1); final Rectangle dest = textArea.modelToView(elem.getStartOffset()); final Rectangle current = scroll.getViewport().getViewRect(); new Timer(20, new ActionListener() { public void actionPerformed(ActionEvent ae) { Timer animator = (Timer)ae.getSource(); if(dest.y < current.y && animator.isRunning()) { int d = Math.max(1, (current.y-dest.y)/2); current.y = current.y - d; textArea.scrollRectToVisible(current); }else if(dest.y > current.y && animator.isRunning()) { int d = Math.max(1, (dest.y-current.y)/2); current.y = current.y + d; textArea.scrollRectToVisible(current); }else{ textArea.setCaretPosition(elem.getStartOffset()); animator.stop(); } } }).start(); }catch(BadLocationException ble) { Toolkit.getDefaultToolkit().beep(); } }} -&jnlp; -&jar; -&zip; **解説 [#kad57b23] java.swing.Timerでイベントを発生させ、目的位置と現在位置の差の半分だけViewRectのスクロールを繰り返すことで、アニメーションを行っています。 //**参考リンク **コメント [#o3d598ba] #comment