gpt4 book ai didi

java - 在 java netbeans swing 中使用 RSyntaxTextArea 库进行语法高亮显示

转载 作者:行者123 更新时间:2023-12-02 12:10:04 25 4
gpt4 key购买 nike

当我在单独的类中执行 java 语法时,文本会突出显示,即TextEditorDemo ,但当我执行代码时没有得到相同的结果swing 中 JCombo Box 的 Action 监听器并使用 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 的 Action 监听器 -

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 教程。那里的演示代码将向您展示如何更好地构建您的类。

关于java - 在 java netbeans swing 中使用 RSyntaxTextArea 库进行语法高亮显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com