簡體   English   中英

在Java NetBeans Swing中使用RSyntaxTextArea庫突出顯示語法

[英]Syntax highlighting using RSyntaxTextArea library in java netbeans swing

當我在單獨的類(即TextEditorDemo)中針對Java語法突出顯示文本時,但在搖擺中執行JCombo Box的動作偵聽器中的代碼並使用rsyntaxtextarea初始化JtextArea msg1(此處)時,未獲得相同的結果對象->語法未突出顯示。

TextEditorDemo.java

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的動作偵聽器-

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);*/

    }
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為實例變量,然后可以從偵聽器引用該變量,並只需更改編輯樣式屬性即可。

或者,如果由於某種原因該類不允許您動態更改屬性,那么您將需要使用:

sp.setViewportView(syntaxTextArea);

在您的偵聽器代碼中。 在這種情況下,scrollpane變量現在需要是您的類中的實例變量。

無論哪種方式,您都需要創建一個可以從ActionListener引用的實例變量,因此您需要重組代碼。 閱讀有關如何使用文本區域的Swing教程。 那里的演示代碼將向您展示如何更好地構建類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM