package nl.andrewlalis.ui.view; import javax.swing.*; import javax.swing.text.*; import java.awt.*; import java.util.HashMap; import java.util.Map; /** * A custom JTextPane object which provides easy methods to print to the screen. */ public class OutputTextPane extends JTextPane { /** * A list of named styles. */ private Map styles; /** * A basic constructor to set default properties on this text pane. */ public OutputTextPane() { this.initStyles(); this.setEditable(false); this.setAutoscrolls(true); DefaultCaret caret = (DefaultCaret) this.getCaret(); caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); } private void initStyles() { this.styles = new HashMap<>(); Style defaultStyle = this.addStyle("default", null); defaultStyle.addAttribute(StyleConstants.FontFamily, "Lucida Consonle"); defaultStyle.addAttribute(StyleConstants.FontSize, 12); this.styles.put("default", defaultStyle); Style grayItalics = this.addStyle("gray_italics", defaultStyle); grayItalics.addAttribute(StyleConstants.Foreground, new Color(128, 128, 128)); grayItalics.addAttribute(StyleConstants.Italic, true); this.styles.put("gray_italics", grayItalics); Style bold = this.addStyle("bold", defaultStyle); bold.addAttribute(StyleConstants.Bold, true); this.styles.put("bold", bold); Style smaller = this.addStyle("smaller", defaultStyle); smaller.addAttribute(StyleConstants.FontSize, 11); this.styles.put("smaller", smaller); Style errorRed = this.addStyle("error_red", bold); errorRed.addAttribute(StyleConstants.Foreground, new Color(255, 0, 0)); this.styles.put("error_red", errorRed); Style warningOrange = this.addStyle("warning_orange", defaultStyle); warningOrange.addAttribute(StyleConstants.Foreground, new Color(255, 127, 0)); this.styles.put("warning_orange", warningOrange); } /** * Prints some text styled with a style that is defined in initStyles. * @param text The text to display. * @param styleName The name of the style to use. */ public void printStyled(String text, String styleName) { StyledDocument doc = this.getStyledDocument(); Style style = this.styles.get(styleName); if (style == null) { style = this.styles.get("default"); } try { doc.insertString(doc.getLength(), text, style); } catch (BadLocationException e) { e.printStackTrace(); } } /** * Prints a line of text, with a newline character appended at the bottom. * @param text The text to append. */ public void printLine(String text) { StyledDocument doc = this.getStyledDocument(); try { doc.insertString(doc.getLength(), (text + '\n'), null); } catch (BadLocationException e) { e.printStackTrace(); } } }