package istlab.KisoJikken.Test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rsyntaxtextarea.SyntaxScheme; import org.fife.ui.rsyntaxtextarea.Theme; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rtextarea.RTextScrollPane; /** * A simple example showing how to modify the fonts and colors used in an * RSyntaxTextArea. There are two methods to do this - via the Java API, and via * an XML file. The latter method is preferred since it's more modular, and * provides a way for your users to customize RSTA in your application. * <p> * * This example uses RSyntaxTextArea 3.1.4. */ public final class SyntaxSchemeDemo extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private RSyntaxTextArea textArea; private static final String TEXT = "public class ExampleSource {\n\n" + " // Check out the crazy modified styles!\n" + " public static void main(String[] args) {\n" + " System.out.println(\"Hello, world!\");\n" + " }\n\n" + "}\n"; private SyntaxSchemeDemo() { JPanel cp = new JPanel(new BorderLayout()); textArea = new RSyntaxTextArea(20, 60); textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); textArea.setCodeFoldingEnabled(true); textArea.setAntiAliasingEnabled(true); RTextScrollPane sp = new RTextScrollPane(textArea); cp.add(sp); textArea.setText(TEXT); JMenuBar mb = new JMenuBar(); JMenu menu = new JMenu("File"); mb.add(menu); JMenuItem changeStyleProgrammaticallyItem = new JMenuItem( "Change Style Programmatically"); changeStyleProgrammaticallyItem .setActionCommand("ChangeProgrammatically"); changeStyleProgrammaticallyItem.addActionListener(this); menu.add(changeStyleProgrammaticallyItem); JMenuItem changeStyleViaThemesItem = new JMenuItem( "Change Style via Theme XML"); changeStyleViaThemesItem.setActionCommand("ChangeViaThemes"); changeStyleViaThemesItem.addActionListener(this); menu.add(changeStyleViaThemesItem); setJMenuBar(mb); setContentPane(cp); setTitle("Syntax Scheme Demo"); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); pack(); setLocationRelativeTo(null); } /** * Listens for the selection of a menu item and performs an action * accordingly. */ @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if ("ChangeProgrammatically".equals(command)) { changeStyleProgrammatically(); } else if ("ChangeViaThemes".equals(command)) { changeStyleViaThemeXml(); } } /** * Changes the styles used in the editor programmatically. */ private void changeStyleProgrammatically() { // Set the font for all token types. setFont(textArea, new Font("Comic Sans MS", Font.PLAIN, 16)); // Change a few things here and there. SyntaxScheme scheme = textArea.getSyntaxScheme(); scheme.getStyle(Token.RESERVED_WORD).background = Color.pink; scheme.getStyle(Token.DATA_TYPE).foreground = Color.blue; scheme.getStyle(Token.LITERAL_STRING_DOUBLE_QUOTE).underline = true; scheme.getStyle(Token.COMMENT_EOL).font = new Font("Georgia", Font.ITALIC, 12); scheme.getStyle(Token.COMMENT_EOL).background = Color.cyan; textArea.revalidate(); } /** * Changes the styles used by the editor via an XML file specification. This * method is preferred because of its ease and modularity. */ private void changeStyleViaThemeXml() { try { Theme theme = Theme.load(getClass().getResourceAsStream( "/org/fife/ui/rsyntaxtextarea/themes/eclipse.xml")); theme.apply(textArea); } catch (IOException ioe) { // Never happens ioe.printStackTrace(); } } /** * Set the font for all token types. * * @param textArea The text area to modify. * @param font The font to use. */ private static void setFont(RSyntaxTextArea textArea, Font font) { if (font != null) { SyntaxScheme ss = textArea.getSyntaxScheme(); ss = (SyntaxScheme) ss.clone(); for (int i = 0; i < ss.getStyleCount(); i++) { if (ss.getStyle(i) != null) { ss.getStyle(i).font = font; } } textArea.setSyntaxScheme(ss); textArea.setFont(font); } } public static void main(String[] args) { // Start all Swing applications on the EDT. SwingUtilities.invokeLater(() -> new SyntaxSchemeDemo().setVisible(true)); } }