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