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
45
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 }