首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java netbeans swing中使用RSyntaxTextArea库突出显示语法

java netbeans swing中使用RSyntaxTextArea库突出显示语法
EN

Stack Overflow用户
提问于 2017-10-06 14:26:12
回答 1查看 720关注 0票数 0

当我在单独的类(即TextEditorDemo )中执行java语法时,文本会被高亮显示,但是当我在swing中执行JCombo Box的操作监听器时,没有得到相同的结果,并且没有突出显示使用rsyntaxtextarea对象->语法初始化JtextArea msg1 (此处)。

TextEditorDemo.java

代码语言:javascript
复制
import javax.swing.*;
import org.fife.ui.rtextarea.*;
import org.fife.ui.rsyntaxtextarea.*;

/**
 * A simple example showing how to use RSyntaxTextArea to add Java syntax
 * highlighting to a Swing application.<p>
 */
public class TextEditorDemo extends JFrame {

   public TextEditorDemo() {

      JPanel cp = new JPanel();

      RSyntaxTextArea syntaxTextArea = new RSyntaxTextArea(20, 60);
      syntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
      // No other property of RSyntaxTextArea is allowed to use

      // You can now modify textArea object similar to any other JTextArea object to add other functionality
      JTextArea textArea = syntaxTextArea;
      JScrollPane sp = new JScrollPane(textArea);
      cp.add(sp);

      setContentPane(cp);
      setTitle("Text Editor Demo");
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      pack();
      setLocationRelativeTo(null);
   }

   public static void main(String[] args) {
      // Start all Swing applications on the EDT.
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            new TextEditorDemo().setVisible(true);
         }
      });
   }

}

JComboBox的动作监听器-

代码语言:javascript
复制
private void language1ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:


        RSyntaxTextArea syntaxTextArea = new RSyntaxTextArea(6, 20);

        String lang = (String) language1.getSelectedItem();
        syntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
        msg1 = syntaxTextArea;
        msg1.setVisible(true);
        System.out.println("language "+lang);
        if (lang.equals("JAVA")) {
            syntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
        }
        else if(lang.equals("C")){
            syntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_C);
        }
        else if(lang.equals("CSHARP")){
            syntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_CSHARP);
        }
        else if(lang.equals("CSS")){
            syntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_CSS);
        }

        //syntaxTextArea.setCodeFoldingEnabled(true);*/

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-06 14:44:34

代码语言:javascript
复制
private void language1ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        RSyntaxTextArea syntaxTextArea = new RSyntaxTextArea(6, 20);

        String lang = (String) language1.getSelectedItem();
        syntaxTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
        msg1 = syntaxTextArea;
        msg1.setVisible(true);

上面的代码什么也不做。实际上还没有将语法区域组件添加到框架中。

不要创建一个新的RSyntaxArea对象!

相反,您需要使syntaxTextArea成为类中的实例变量,然后可以从侦听器引用变量,只需更改编辑样式属性。

或者,如果由于某些原因,类不允许动态更改属性,则需要使用:

代码语言:javascript
复制
sp.setViewportView(syntaxTextArea);

在你的侦听器代码中。在这种情况下,滚动窗格变量现在需要是类中的实例变量。

无论哪种方式,您都需要创建一个可以从ActionListener引用的实例变量,因此您需要重新构造代码。阅读关于如何使用文本区域的Swing教程。那里的演示代码将向您展示如何更好地构造类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46608019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档