2017-10-06 4 views
0

別のクラス、つまり、 TextEditorDemoでjavaの構文が強調表示されていますが、コード実行時に同じ結果が得られません。 JComboのアクションリスナーボックスをスイングし、JtextArea msg1(ここ)をrsyntaxtextareaオブジェクトで初期化する - >構文が強調表示されていません。 JComboBoxのためのjava netbeans swingでRSyntaxTextAreaライブラリを使用したシンタックスハイライト

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); 
     } 
     }); 
    } 

} 

アクションリスナー -

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

    } 

答えて

1
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から参照できるインスタンス変数を作成する必要がありますので、コードを再構成する必要があります。 How to Use Text AreasのSwingチュートリアルを読んでください。デモコードでは、クラスの構造をより良くする方法を示します。

関連する問題