View Javadoc
1   package com.jsql.view.swing.panel.util;
2   
3   import javax.swing.*;
4   import javax.swing.text.Element;
5   import javax.swing.text.View;
6   import javax.swing.text.ViewFactory;
7   import javax.swing.text.html.HTMLEditorKit;
8   import javax.swing.text.html.InlineView;
9   import javax.swing.text.html.ParagraphView;
10  
11  public class HTMLEditorKitTextPaneWrap extends HTMLEditorKit {
12      @Override
13      public ViewFactory getViewFactory() {
14          return new HTMLFactory() {
15  
16              @Override
17              public View create(Element e) {
18                  View v = super.create(e);
19                  if (v instanceof InlineView) {
20                      return this.getInlineView(e);
21                  } else if (v instanceof ParagraphView) {
22                      return this.getParagraphView(e);
23                  }
24                  return v;
25              }
26  
27              private View getParagraphView(Element e) {
28                  return new ParagraphView(e) {
29                      @Override
30                      protected SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements sizeRequirements) {
31                          SizeRequirements r = sizeRequirements;
32                          if (r == null) {
33                              r = new SizeRequirements();
34                          }
35                          
36                          float pref = this.layoutPool.getPreferredSpan(axis);
37                          float min = this.layoutPool.getMinimumSpan(axis);
38                          
39                          // Don't include insets, Box.getXXXSpan will include
40                          // them.
41                          r.minimum = (int) min;
42                          r.preferred = Math.max(r.minimum, (int) pref);
43                          r.maximum = Integer.MAX_VALUE;
44                          r.alignment = 0.5f;
45                          return r;
46                      }
47                  };
48              }
49  
50              private View getInlineView(Element e) {
51                  return new InlineView(e) {
52  
53                      @Override
54                      public int getBreakWeight(int axis, float pos, float len) {
55                          return View.GoodBreakWeight;
56                      }
57  
58                      @Override
59                      public View breakView(int axis, int p0, float pos, float len) {
60                          if (axis == View.X_AXIS) {
61                              this.checkPainter();
62                              int p1 = this.getGlyphPainter().getBoundedPosition(this, p0, pos, len);
63                              if (p0 == this.getStartOffset() && p1 == this.getEndOffset()) {
64                                  return this;
65                              }
66                              return this.createFragment(p0, p1);
67                          }
68                          return this;
69                      }
70                  };
71              }
72          };
73      }
74  }