Re: Paragraph properties with RTF
The program in this java forum uses the StyledDocument class and seems
to be able to do everything needed. Perhaps using these classes will
solve my problem.
http://www.java-forums.org/awt-swing/2260-how-insert-tables-into-jtextpane.html
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.text.*;
public class AddingTables {
JTextPane textPane;
public AddingTables() {
String[] text = {
"This component models paragraphs that are composed of " +
"runs of character level attributes.\n", // 0 -
89
" \n", // 90 -
91
"Each paragraph may have a logical style attached to it
which " +
"contains the default attributes to use if not overridden
by " +
"attributes set on the paragraph or character run.
Components " +
"and images may be embedded in the flow of text." // 92 -
321
};
textPane = new JTextPane();
StyledDocument doc = textPane.getStyledDocument();
createStyles(doc);
setContent(doc, text);
styleContent(doc);
}
private void createStyles(StyledDocument doc) {
Style baseStyle = doc.addStyle("base", null);
StyleConstants.setFontFamily(baseStyle, "Lucida Sans
Unicode");
StyleConstants.setFontSize(baseStyle, 18);
StyleConstants.setFirstLineIndent(baseStyle, 20f);
StyleConstants.setLeftIndent(baseStyle, 10f);
Style style = doc.addStyle("bold", baseStyle);
StyleConstants.setBold(style, true);
style = doc.addStyle("italic", baseStyle);
StyleConstants.setItalic(style, true);
style = doc.addStyle("blue", baseStyle);
StyleConstants.setForeground(style, Color.blue);
style = doc.addStyle("underline", baseStyle);
StyleConstants.setUnderline(style, true);
style = doc.addStyle("green", baseStyle);
StyleConstants.setForeground(style, Color.green.darker());
StyleConstants.setUnderline(style, true);
style = doc.addStyle("highlight", baseStyle);
StyleConstants.setForeground(style, Color.yellow);
StyleConstants.setBackground(style, Color.black);
style = doc.addStyle("table", null);
StyleConstants.setComponent(style, getTableComponent());
style = doc.addStyle("tableParagraph", null);
StyleConstants.setLeftIndent(style, 35f);
StyleConstants.setRightIndent(style, 35f);
StyleConstants.setSpaceAbove(style, 15f);
StyleConstants.setSpaceBelow(style, 15f);
}
private void setContent(StyledDocument doc, String[] text) {
try {
doc.insertString(0, text[0], doc.getStyle
("base"));
doc.insertString(doc.getLength(), text[1], doc.getStyle
("table"));
doc.insertString(doc.getLength(), text[2], doc.getStyle
("base"));
} catch(BadLocationException e) {
System.out.printf("Bad location error: %s%n", e.getMessage
());
}
}
private void styleContent(StyledDocument doc) {
Style style = doc.getStyle("base");
doc.setLogicalStyle(0, style);
style = doc.getStyle("underline");
doc.setCharacterAttributes(22, 10, style, false);
style = doc.getStyle("highlight");
doc.setCharacterAttributes(62, 26, style, false);
Style logicalStyle = doc.getLogicalStyle(0);
style = doc.getStyle("tableParagraph");
doc.setParagraphAttributes(90, 1, style, false);
style = doc.getStyle("table");
doc.setCharacterAttributes(90, 1, style, false);
doc.setLogicalStyle(92, logicalStyle);
style = doc.getStyle("blue");
doc.setCharacterAttributes(118, 13, style, false);
style = doc.getStyle("italic");
doc.setCharacterAttributes(166, 18, style, false);
style = doc.getStyle("green");
doc.setCharacterAttributes(235, 9, style, false);
doc.setCharacterAttributes(248, 9, style, false);
style = doc.getStyle("bold");
doc.setCharacterAttributes(263, 10, style, false);
doc.setCharacterAttributes(278, 6, style, false);
}
private JScrollPane getTableComponent() {
JTable table = new JTable(getModel());
Dimension d = table.getPreferredSize();
d.width = 300;
table.setPreferredScrollableViewportSize(d);
return new JScrollPane(table);
}
private AbstractTableModel getModel() {
return new AbstractTableModel() {
public int getColumnCount() { return 3; }
public int getRowCount() { return 3; }
public Object getValueAt(int row, int col) {
return String.valueOf(row + 1) + (col + 1);
}
};
}
private JScrollPane getContent() {
return new JScrollPane(textPane);
}
public static void main(String[] args) {
System.setProperty("swing.aatext", "true");
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new AddingTables().getContent());
f.setSize(500,400);
f.setLocation(200,200);
f.setVisible(true);
}
}