1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.JToggleButton;
import javax.swing.text.AbstractDocument;
import javax.swing.text.Element;
import javax.swing.text.JTextComponent;
import javax.swing.text.ParagraphView;
import javax.swing.text.StyledEditorKit;
import javax.swing.text.View;
import javax.swing.text.ViewFactory;
public class Essai {
protected static ViewFactory defaultFactory;
public static void main(String[] args) {
new Essai();
}
public Essai() {
final JTextPane editor = new JTextPane();
final EditorKitExtended kit = new EditorKitExtended(editor);
editor.setEditorKit(kit);
editor.setText("mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\noooooooo");
final JFrame frame = new JFrame();
frame.setSize(200, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new GridLayout(2,1));
frame.getContentPane().add(editor);
final JToggleButton activeWrap = new JToggleButton("auto wrap");
activeWrap.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (activeWrap.isSelected()) {
kit.setAutoWordWrap(true);
}
else {
kit.setAutoWordWrap(false);
}
}
});
frame.getContentPane().add(activeWrap);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public class EditorKitExtended extends StyledEditorKit {
private JTextComponent theTextComponent;
private boolean autoWordWrap = false;
public EditorKitExtended(JTextComponent jTextComponent) {
super();
this.theTextComponent = jTextComponent;
}
public ViewFactory getViewFactory() {
if (defaultFactory == null) defaultFactory = new ExtendedViewFactory(super.getViewFactory());
return defaultFactory;
}
public boolean isAutoWordWrap() {
return autoWordWrap;
}
public void setAutoWordWrap(boolean autoWordWrap) {
this.autoWordWrap = autoWordWrap;
// theTextComponent.revalidate() ne permet pas de mettre à jour le composant
theTextComponent.revalidate();
}
private class ExtendedViewFactory implements ViewFactory {
private ViewFactory parentViewFactory;
ExtendedViewFactory(ViewFactory parentViewFactory){
super();
this.parentViewFactory = parentViewFactory;
}
public View create(Element elem) {
if (AbstractDocument.ParagraphElementName.equals(elem.getName()))
return new TabParagraphView(elem);
return parentViewFactory.create(elem);
}
}
public class TabParagraphView extends ParagraphView {
TabParagraphView(Element elem) {
super(elem);
}
@Override
protected void layout(int width, int height) {
if (!autoWordWrap) super.layout(Short.MAX_VALUE, height);
else super.layout(width, height);
}
@Override
public float getMinimumSpan(int axis) {
if (!autoWordWrap) return super.getPreferredSpan(axis);
else return super.getMinimumSpan(axis);
}
}
}
} |
Partager