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.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.FontUIResource; import org.fife.ui.rsyntaxtextarea.AbstractTokenMakerFactory; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.SyntaxScheme; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.TokenMakerFactory; import org.fife.ui.rtextarea.RTextScrollPane; import org.mdkt.compiler.InMemoryJavaCompiler; public class StyleTestDemo extends JFrame { RSyntaxTextArea textArea; public StyleTestDemo() { JPanel contentPane = new JPanel(new BorderLayout()); // RSyntaxDocument doc = new RSyntaxDocument(); // TokenMaker tokenMaker = new PlainTextTokenMaker(); // TokenMaker tokenMaker = new SimpleTokenMaker(); // doc.setSyntaxStyle(tokenMaker); textArea = new RSyntaxTextArea(); AbstractTokenMakerFactory atmf = (AbstractTokenMakerFactory)TokenMakerFactory.getDefaultInstance(); atmf.putMapping("text/terminal", "istlab.KisoJikken.Test.SimpleTokenMaker"); atmf.putMapping("text/custom", "istlab.KisoJikken.Test.MyCustomTokenMaker"); textArea.setSyntaxEditingStyle("text/terminal"); // textArea.setCurrentLineHighlightColor(null); // カーソル行のハイライト色 textArea.setHighlightCurrentLine(false); // カーソル行のハイライトを消す // textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE); SyntaxScheme scheme = textArea.getSyntaxScheme(); scheme.getStyle(Token.COMMENT_EOL).background = Color.cyan; scheme.getStyle(Token.COMMENT_DOCUMENTATION).background = Color.cyan.brighter(); scheme.getStyle(Token.COMMENT_KEYWORD).background = Color.green; scheme.getStyle(Token.COMMENT_MARKUP).background = Color.gray; scheme.getStyle(Token.COMMENT_MULTILINE).background = Color.yellow; textArea.setText("initial text\ncomment // com"); textArea.revalidate(); // textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE); textArea.setCodeFoldingEnabled(true); textArea.setFont(new FontUIResource("sansserif", Font.PLAIN, 20)); contentPane.add(new RTextScrollPane(textArea,false)); // 行番号を消す setContentPane(contentPane); setTitle("MySyntax Demo"); setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel north = new JPanel(); JButton loadB = new JButton("Load"); loadB.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { InputStream is = getClass().getResourceAsStream("/Hello.java"); BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line; try { while((line=br.readLine())!=null){ sb.append(line+"\n"); } } catch (IOException e1) { e1.printStackTrace(); } textArea.setText(sb.toString()); } }); north.add(loadB); JButton saveB = new JButton("Save"); saveB.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(textArea.getText()); } }); north.add(saveB); JButton execB = new JButton("Exec"); execB.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Class<?> helloClass; try { helloClass = InMemoryJavaCompiler.newInstance().compile("Hello", textArea.getText()); System.out.println(helloClass.getClass().getName()); System.out.println(helloClass.getDeclaredConstructor().newInstance().toString()); } catch (Exception e1) { e1.printStackTrace(); } } }); north.add(execB); // JOptionPane.showMessageDialog(null, "test"); // JButton javaB = new JButton("Java"); // javaB.addActionListener(e -> { // doc.setSyntaxStyle(new JavaTokenMaker()); // textArea.setSyntaxEditingStyle("text/c"); // // doc.setSyntaxStyle("text/java"); // // textArea.setDocument(doc); // } ); // north.add(javaB); // JButton plainB = new JButton("Plain"); // javaB.addActionListener(e -> { // doc.setSyntaxStyle(new PlainTextTokenMaker()); // textArea.setSyntaxEditingStyle("text/plain"); // // doc.setSyntaxStyle("text/plain"); // // textArea.setDocument(doc); // } ); // north.add(plainB); add(north, BorderLayout.NORTH); pack(); setLocationRelativeTo(null); } public static void main(String[] args) { // Instantiate GUI on the EDT. SwingUtilities.invokeLater(() -> { try { String laf = UIManager.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel(laf); } catch (Exception e) { /* Never happens */ } new StyleTestDemo().setVisible(true); }); } }