在java中使用RSyntaxTextArea库的语法高亮netbeans swing
问题描述:
当我在一个单独的类中执行时,文本突出显示用于java语法,例如 TextEditorDemo,但是在执行JCombo的 动作侦听器中的代码时得不到相同的结果使用rsyntaxtextarea对象 - >语法在框中摆动并初始化JtextArea msg1(此处)未被突出显示。在java中使用RSyntaxTextArea库的语法高亮netbeans 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);
}
});
}
}
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引用,因此您将需要重构您的代码。请阅读How to Use Text Areas的Swing教程。这里的演示代码将告诉你如何更好地构建你的类。