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; AbstractTokenMakerFactory atmf; 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(); String[] syntaxis = new String[] { "Simple2","Simple", "MyCustom", "PlainText" ,"WordTest"}; atmf = (AbstractTokenMakerFactory) TokenMakerFactory.getDefaultInstance(); for (String syn : syntaxis) { atmf.putMapping("text/" + syn, "istlab.KisoJikken.Test." + syn + "TokenMaker"); } textArea.setSyntaxEditingStyle("text/" + syntaxis[0]); // 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 /*.java \ncomment // com\n https://www.istlab.info/ \n aaa /** asdf\n aaa \n */ \n aaa /* asdf\n aaa \n */ \n" + "== コンパイル開始 ==\n> cd ~/NWP/src\n> javac -encoding UTF-8 j1/*.java\n==== end ===\n=== コンパイル終了 == (ALT+Wで閉じる)\n"); // textArea.setText("abc"); 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"); for(String syn: syntaxis){ JButton javaB = new JButton(syn); javaB.addActionListener(e -> { textArea.setSyntaxEditingStyle("text/"+syn); // 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); }); } }