2017-10-06 2 views
0

texte est mis en évidence la syntaxe java quand je le fais dans une classe séparée c.-à- TextEditorDemo, mais pas obtenir le même résultat quand j'exécute le code dans auditeur d'action d'un JCombo Boîte en balançant et en initialisant le JtextArea msg1 (ici) avec l'objet rsyntaxtextarea -> la syntaxe n'est pas en surbrillance.La coloration syntaxique en utilisant la bibliothèque RSyntaxTextArea dans NetBeans Java Swing

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

} 
auditeur d'action

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

    } 

Répondre

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

Le code ci-dessus ne fait rien. Vous n'avez pas réellement ajouté le composant de zone de syntaxe au cadre.

Ne créez pas un nouvel objet RSyntaxArea! A la place, vous devez faire de syntaxTextArea une variable d'instance dans votre classe, puis vous pouvez référencer la variable à partir de l'écouteur et modifier simplement la propriété de style d'édition.

Ou si pour une raison quelconque la classe ne vous permet pas de modifier dynamiquement la propriété, alors vous devrez utiliser:

sp.setViewportView(syntaxTextArea); 

dans votre code d'écoute. Dans ce cas, la variable scrollpane devra maintenant être une variable d'instance dans votre classe. Dans les deux cas, vous devrez créer une variable d'instance pouvant être référencée à partir de votre ActionListener. Vous devrez donc restructurer votre code. Lisez le tutoriel Swing au How to Use Text Areas. Le code de démonstration vous montrera comment mieux structurer vos classes.