2009-03-25 6 views

答えて

1

はこのお試しください... JEditorPaneのは、この機能をサポートしていませんが、あなたが必要な機能を追加する拡張少しの操作を行うことができますしている、TransformUIをチェック

http://www.developer.com/java/other/article.php/3315511

+0

残念ながら、私のHTMLEditorKitではうまくいきません。テキストサイズはそれ以上大きくはありません。 – Tom

+0

これはHTMLEditorKit用にカスタマイズする必要がありますが、このチュートリアルではStyledEditorKitと同じことを行います。 – stephendl

+0

私はそれを行うことができませんでした。クラスStyledViewFactoryは、ViewFactoryがHTMLをサポートしていないことを実装しています。デフォルトでLabelViewが多くの問題を引き起こしています。 – Tom

0

をクールな「拡張子」はJXLayerです。 demoを起動して、顎を落としてください! ;-)( 'Auto pack'チェックボックスをオンにしてください)

基本的には、コンポーネント上でペイントを呼び出す前に拡大/縮小AffineTransformを設定して、コンポーネントの拡大をすべて行います。したがって、あなたのズームはそこにあります.. ..!

2

私はJEditorPaneののHTMLコンテンツを中/ズームアウトすることができます私のカスタマイズされたのHTMLEditorKitを作り、それがより良いレンダリングのパフォーマンスを持って、私はLargeHTMLEditorKitそれを呼んだ:

/** 
* An extended {@link HTMLEditorKit} that allow faster 
* rendering of large html files and allow zooming of content. 
* @author Alessio Pollero 
* @version 1.0 
*/ 
public class LargeHTMLEditorKit extends HTMLEditorKit { 

    ViewFactory factory = new MyViewFactory(); 

     @Override 
     public ViewFactory getViewFactory() { 
      return factory; 
     } 

     class MyViewFactory extends HTMLFactory { 
      @Override 
      public View create(Element elem) { 
       AttributeSet attrs = elem.getAttributes(); 
       Object elementName = attrs.getAttribute(AbstractDocument.ElementNameAttribute); 
       Object o = (elementName != null) ? null : attrs.getAttribute(StyleConstants.NameAttribute); 
       if (o instanceof HTML.Tag) { 
        HTML.Tag kind = (HTML.Tag) o; 
        if (kind == HTML.Tag.HTML) { 
         return new HTMLBlockView(elem); 
        } 
        else if (kind == HTML.Tag.IMPLIED) { 
         String ws = (String) elem.getAttributes().getAttribute(CSS.Attribute.WHITE_SPACE); 
         if ((ws != null) && ws.equals("pre")) { 
          return super.create(elem); 
         } 
         return new HTMLParagraphView(elem); 
        } else if ((kind == HTML.Tag.P) || 
          (kind == HTML.Tag.H1) || 
          (kind == HTML.Tag.H2) || 
          (kind == HTML.Tag.H3) || 
          (kind == HTML.Tag.H4) || 
          (kind == HTML.Tag.H5) || 
          (kind == HTML.Tag.H6) || 
          (kind == HTML.Tag.DT)) { 
         // paragraph 
         return new HTMLParagraphView(elem); 
        } 
       } 
       return super.create(elem); 
      } 

     } 


     private class HTMLBlockView extends BlockView { 

      public HTMLBlockView(Element elem) { 
       super(elem, View.Y_AXIS); 
      } 

      @Override 
      protected void layout(int width, int height) { 
       if (width<Integer.MAX_VALUE) { 
        super.layout(new Double(width/getZoomFactor()).intValue(), 
          new Double(height * 
             getZoomFactor()).intValue()); 
       } 
      } 

      public double getZoomFactor() { 
       Double scale = (Double) getDocument().getProperty("ZOOM_FACTOR"); 
       if (scale != null) { 
        return scale.doubleValue(); 
       } 

       return 1; 
      } 

      @Override 
      public void paint(Graphics g, Shape allocation) { 
       Graphics2D g2d = (Graphics2D) g; 
       double zoomFactor = getZoomFactor(); 
       AffineTransform old = g2d.getTransform(); 
       g2d.scale(zoomFactor, zoomFactor); 
       super.paint(g2d, allocation); 
       g2d.setTransform(old); 
      } 

      @Override 
      public float getMinimumSpan(int axis) { 
       float f = super.getMinimumSpan(axis); 
       f *= getZoomFactor(); 
       return f; 
      } 

      @Override 
      public float getMaximumSpan(int axis) { 
       float f = super.getMaximumSpan(axis); 
       f *= getZoomFactor(); 
       return f; 
      } 

      @Override 
      public float getPreferredSpan(int axis) { 
       float f = super.getPreferredSpan(axis); 
       f *= getZoomFactor(); 
       return f; 
      } 

      @Override 
      public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException { 
       double zoomFactor = getZoomFactor(); 
       Rectangle alloc; 
       alloc = a.getBounds(); 
       Shape s = super.modelToView(pos, alloc, b); 
       alloc = s.getBounds(); 
       alloc.x *= zoomFactor; 
       alloc.y *= zoomFactor; 
       alloc.width *= zoomFactor; 
       alloc.height *= zoomFactor; 

       return alloc; 
      } 

      @Override 
      public int viewToModel(float x, float y, Shape a, 
            Position.Bias[] bias) { 
       double zoomFactor = getZoomFactor(); 
       Rectangle alloc = a.getBounds(); 
       x /= zoomFactor; 
       y /= zoomFactor; 
       alloc.x /= zoomFactor; 
       alloc.y /= zoomFactor; 
       alloc.width /= zoomFactor; 
       alloc.height /= zoomFactor; 

       return super.viewToModel(x, y, alloc, bias); 
      } 

     } 
} 

そして、ここで必要なHTMLParagraphViewです

class HTMLParagraphView extends ParagraphView { 

    public static int MAX_VIEW_SIZE=100; 

     public HTMLParagraphView(Element elem) { 
      super(elem); 
      strategy = new HTMLParagraphView.HTMLFlowStrategy(); 
     } 

     public static class HTMLFlowStrategy extends FlowStrategy { 
      protected View createView(FlowView fv, int startOffset, int spanLeft, int rowIndex) { 
       View res=super.createView(fv, startOffset, spanLeft, rowIndex); 
       if (res.getEndOffset()-res.getStartOffset()> MAX_VIEW_SIZE) { 
        res = res.createFragment(startOffset, startOffset+ MAX_VIEW_SIZE); 
       } 
       return res; 
      } 

     } 
     public int getResizeWeight(int axis) { 
      return 0; 
     } 
} 

はその後あなたがこの方法でそれを使用することができます。

//Create a new JEditorPane 
JEditorPane yourPane = new JEditorPane(); 
//Set the custom HTMLEditorKit 
yourPane.setEditorKit(new LargeHTMLEditorKit()); 
//Set the zoom to 150% 
yourPane.getDocument().putProperty("ZOOM_FACTOR", new Double(1.5)); 
関連する問題