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                  
19                  View v = super.create(e);
20                  
21                  if (v instanceof InlineView) {
22                      return this.getInlineView(e);
23                  } else if (v instanceof ParagraphView) {
24                      return this.getParagraphView(e);
25                  }
26                  
27                  return v;
28              }
29  
30              private View getParagraphView(Element e) {
31                  return new ParagraphView(e) {
32                      @Override
33                      protected SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements sizeRequirements) {
34                          
35                          SizeRequirements r = sizeRequirements;
36                          
37                          if (r == null) {
38                              r = new SizeRequirements();
39                          }
40                          
41                          float pref = this.layoutPool.getPreferredSpan(axis);
42                          float min = this.layoutPool.getMinimumSpan(axis);
43                          
44                          // Don't include insets, Box.getXXXSpan will include
45                          // them.
46                          r.minimum = (int) min;
47                          r.preferred = Math.max(r.minimum, (int) pref);
48                          r.maximum = Integer.MAX_VALUE;
49                          r.alignment = 0.5f;
50                          
51                          return r;
52                      }
53                  };
54              }
55  
56              private View getInlineView(Element e) {
57                  return new InlineView(e) {
58  
59                      @Override
60                      public int getBreakWeight(int axis, float pos, float len) {
61                          return View.GoodBreakWeight;
62                      }
63  
64                      @Override
65                      public View breakView(int axis, int p0, float pos, float len) {
66                          
67                          if (axis == View.X_AXIS) {
68                              
69                              this.checkPainter();
70                              int p1 = this.getGlyphPainter().getBoundedPosition(this, p0, pos, len);
71                              
72                              if (p0 == this.getStartOffset() && p1 == this.getEndOffset()) {
73                                  return this;
74                              }
75                              
76                              return this.createFragment(p0, p1);
77                          }
78                          
79                          return this;
80                      }
81                  };
82              }
83          };
84      }
85  }