Как использовать подсветку синтаксиса платформы Netbeans с JEditorPane? - PullRequest
4 голосов
/ 14 марта 2010

В Интернете есть много учебных пособий, дающих очень сложные или нерабочие примеры по этому вопросу. Кажется, что люди рекомендуют другим использовать подсветку синтаксиса, предлагаемую netbeans, но я полностью озадачен, как это сделать!

Я проверил много сайтов по этому вопросу, и лучшее, что я могу найти, это: http://www.antonioshome.net/kitchen/netbeans/nbms-standalone.php

Однако я до сих пор не могу использовать этот пример (так как он предназначен для людей, которые не хотят использовать платформу Netbeans, а только ее часть), и я все еще не уверен, смогу ли я просто используйте подсветку синтаксиса простым способом plug-n-play. Например, NetBeans поддерживает по умолчанию для нескольких языков, могу ли я просто использовать маркеры в JEditorPane для разбора Ruby / Python / Java, например? или мне нужно написать свой собственный парсер: - | ?

Я буду очень признателен за небольшой простой пример того, как включить подсветку синтаксиса в автономном приложении, использующем платформу netbeans.

Ответы [ 5 ]

1 голос
/ 29 января 2011

Алло,

Я обнаружил аналогичную нехватку информации, если вы пытаетесь создать автономное приложение для платформы. В конце концов, вот как я это сделал в своем собственном приложении, да, возможно, это было изобретением колеса ... но так как я не смог найти колесо, во-первых, может создать один ..

Я взял информацию о том, как создать комплект редактора Java, здесь: http://java.sun.com/products/jfc/tsc/articles/text/editor_kit/index.html

Построил небольшой пакет с необходимыми файлами и поместил его в приложение моей платформы под одним из модулей. Вам понадобится tools.jar, в котором скрываются все эти биты сканера, он находится в папке JDK install / lib - вам придется это обернуть.

Затем воспользовался примером в тестовой программе, чтобы выяснить, как установить стили: - Мне нравится полный контроль над окраской токенов.

Бесстыдно скопировано с включенного JavaKitTest ..

    JavaContext styles = kit.getStylePreferences();
    Style s;

    //Make Comment lurid green
    s = styles.getStyleForScanValue(Token.COMMENT.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 153, 153));

    //Make String err.. wotever color that is..
    s = styles.getStyleForScanValue(Token.STRINGVAL.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 153, 102));

    //Make NEW nice n red
    s = styles.getStyleForScanValue(Token.NEW.getScanValue());
    StyleConstants.setForeground(s, new Color(102, 10, 10));


    //Do some other scan codes for keywords
    Color keyword = new Color(102, 102, 255);
    for (int code = 70; code <= 130; code++) {
        s = styles.getStyleForScanValue(code);
        if (s != null) {
            StyleConstants.setForeground(s, keyword);
        }
    }

Это всего лишь java-сканер, конечно, в этом примере вы можете поиграть с грамматикой и токенами и придумать свои собственные правила, я думаю, что есть учебники по всем этим вещам ..

Надеюсь, это немного поможет.

1 голос
/ 17 июня 2010

Вот как я это использую:

String mimeType = "text/x-java"; // NOI18N
JEditorPane editorPane = new JEditorPane();

editorPane.setEditorKit(MimeLookup.getLookup(mimeType).lookup(EditorKit.class));
0 голосов
/ 06 ноября 2010

Следующее должно дать вам подсветку синтаксиса для javascript. Найдите мимы для других типов, чтобы использовать другой синтаксис.

File tmpFile = File.createTempFile("tmp_sejsrunner", ".js");
tmpFile = FileUtil.normalizeFile(tmpFile);
FileObject fob = FileUtil.createData(tmpFile);

DataObject dob = DataObject.find(fob);

EditorKit kit = CloneableEditorSupport.getEditorKit("text/javascript");
this.scriptEditorPane.setEditorKit(kit);
this.scriptEditorPane.getDocument().putProperty(Document.StreamDescriptionProperty, dob);
0 голосов
/ 05 июля 2010

Для получения номеров строк вы можете использовать следующий фрагмент:

BaseTextUI eui = new BaseTextUI();
eui.installUI(editor);
panel.add(eui.getEditorUI().getExtComponent());
0 голосов
/ 18 апреля 2010

Частичный ответ:

Очевидно, что следующее включит подсветку синтаксиса для Java (и некоторое завершение кода), однако, похоже, он не работает для других языков (кроме java, XML), хотя и должен [1]. Также я не могу найти способ включить номера строк (они включены, но они не отображаются)!

yourEditor.setContentType("text/x-java");
yourEditor.putClientProperty("HighlightsLayerIncludes", "^org\\.netbeans\\.modules\\.editor\\.lib2\\.highlighting\\.SyntaxHighlighting$");

Если кто-то решит помочь с этим, подойдет более унифицированный пример, включающий номера строк и другие свойства. Конечно, это не должно быть действительно сложным?!?

[1] http://netbeans.sourcearchive.com/lines/6.5-0ubuntu2/CodeTemplatesPanel_8java-source.html

...