源碼編輯器教程視頻建黨一百周年(建黨100周年視頻腳本)
今天給各位分享源碼編輯器教程視頻建黨一百周年的知識(shí),其中也會(huì)對(duì)建黨100周年視頻腳本進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!
本文目錄一覽:
- 1、java源代碼編輯器 設(shè)計(jì)用于編寫Java源代碼的編輯器,基本要求:可以完成源程序的文件打開,編輯和文件保存
- 2、有哪些好用的代碼編輯器值得推薦?
- 3、源碼編輯器如何使用變量來進(jìn)行積分
- 4、如何在源碼編輯器中設(shè)置聲音與文字同步
java源代碼編輯器 設(shè)計(jì)用于編寫Java源代碼的編輯器,基本要求:可以完成源程序的文件打開,編輯和文件保存
一. 高亮的內(nèi)容:
需要高亮的內(nèi)容有:
1. 關(guān)鍵字, 如 public, int, true 等.
2. 運(yùn)算符, 如 +, -, *, /等
3. 數(shù)字
4. 高亮字符串, 如 "example of string"
5. 高亮單行注釋
6. 高亮多行注釋
二. 實(shí)現(xiàn)高亮的核心方法:
StyledDocument.setCharacterAttributes(int offset, int length, AttributeSet s, boolean replace)
三. 文本編輯器選擇.
Java中提供的多行文本編輯器有: JTextComponent, JTextArea, JTextPane, JEditorPane等, 都可以使用. 但是因?yàn)檎Z(yǔ)法著色中文本要使用多種風(fēng)格的樣式, 所以這些文本編輯器的document要使用StyledDocument.
JTextArea使用的是PlainDocument, 此document不能進(jìn)行多種格式的著色.
JTextPane, JEditorPane使用的是StyledDocument, 默認(rèn)就可以使用.
為了實(shí)現(xiàn)語(yǔ)法著色, 可以繼承自DefaultStyledDocument, 設(shè)置其為這些文本編輯器的documet, 或者也可以直接使用JTextPane, JEditorPane來做. 為了方便, 這里就直接使用JTextPane了.
四. 何時(shí)進(jìn)行著色.
當(dāng)文本編輯器中有字符被插入或者刪除時(shí), 文本的內(nèi)容就發(fā)生了變化, 這時(shí)檢查, 進(jìn)行著色.
為了監(jiān)視到文本的內(nèi)容發(fā)生了變化, 要給document添加一個(gè)DocumentListener監(jiān)聽器, 在他的removeUpdate和insertUpdate中進(jìn)行著色處理.
而changedUpdate方法在文本的屬性例如前景色, 背景色, 字體等風(fēng)格改變時(shí)才會(huì)被調(diào)用.
@Override
public void changedUpdate(DocumentEvent e) {
}
@Override
public void insertUpdate(DocumentEvent e) {
try {
colouring((StyledDocument) e.getDocument(), e.getOffset(), e.getLength());
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
@Override
public void removeUpdate(DocumentEvent e) {
try {
// 因?yàn)閯h除后光標(biāo)緊接著影響的單詞兩邊, 所以長(zhǎng)度就不需要了
colouring((StyledDocument) e.getDocument(), e.getOffset(), 0);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
五. 著色范圍:
pos: 指變化前光標(biāo)的位置.
len: 指變化的字符數(shù).
例如有關(guān)鍵字public, int
單詞"publicint", 在"public"和"int"中插入一個(gè)空格后變成"public int", 一個(gè)單詞變成了兩個(gè), 這時(shí)對(duì)"public" 和 "int"進(jìn)行著色.
著色范圍是public中p的位置和int中t的位置加1, 即是pos前面單詞開始的下標(biāo)和pos+len開始單詞結(jié)束的下標(biāo). 所以上例中要著色的范圍是"public int".
提供了方法indexOfWordStart來取得pos前單詞開始的下標(biāo), 方法indexOfWordEnd來取得pos后單詞結(jié)束的下標(biāo).
public int indexOfWordStart(Document doc, int pos) throws BadLocationException {
// 從pos開始向前找到第一個(gè)非單詞字符.
for (; pos 0 isWordCharacter(doc, pos - 1); --pos);
return pos;
}
public int indexOfWordEnd(Document doc, int pos) throws BadLocationException {
// 從pos開始向前找到第一個(gè)非單詞字符.
for (; isWordCharacter(doc, pos); ++pos);
return pos;
}
一個(gè)字符是單詞的有效字符: 是字母, 數(shù)字, 下劃線.
public boolean isWordCharacter(Document doc, int pos) throws BadLocationException {
char ch = getCharAt(doc, pos); // 取得在文檔中pos位置處的字符
if (Character.isLetter(ch) || Character.isDigit(ch) || ch == '_') { return true; }
return false;
}
所以著色的范圍是[start, end] :
int start = indexOfWordStart(doc, pos);
int end = indexOfWordEnd(doc, pos + len);
六. 關(guān)鍵字著色.
從著色范圍的開始下標(biāo)起進(jìn)行判斷, 如果是以字母開或者下劃線開頭, 則說明是單詞, 那么先取得這個(gè)單詞, 如果這個(gè)單詞是關(guān)鍵字, 就進(jìn)行關(guān)鍵字著色, 如果不是, 就進(jìn)行普通的著色. 著色完這個(gè)單詞后, 繼續(xù)后面的著色處理. 已經(jīng)著色過的字符, 就不再進(jìn)行著色了.
public void colouring(StyledDocument doc, int pos, int len) throws BadLocationException {
// 取得插入或者刪除后影響到的單詞.
// 例如"public"在b后插入一個(gè)空格, 就變成了:"pub lic", 這時(shí)就有兩個(gè)單詞要處理:"pub"和"lic"
// 這時(shí)要取得的范圍是pub中p前面的位置和lic中c后面的位置
int start = indexOfWordStart(doc, pos);
int end = indexOfWordEnd(doc, pos + len);
char ch;
while (start end) {
ch = getCharAt(doc, start);
if (Character.isLetter(ch) || ch == '_') {
// 如果是以字母或者下劃線開頭, 說明是單詞
// pos為處理后的最后一個(gè)下標(biāo)
start = colouringWord(doc, start);
} else {
//SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle));
++start;
}
}
}
public int colouringWord(StyledDocument doc, int pos) throws BadLocationException {
int wordEnd = indexOfWordEnd(doc, pos);
String word = doc.getText(pos, wordEnd - pos); // 要進(jìn)行著色的單詞
if (keywords.contains(word)) {
// 如果是關(guān)鍵字, 就進(jìn)行關(guān)鍵字的著色, 否則使用普通的著色.
// 這里有一點(diǎn)要注意, 在insertUpdate和removeUpdate的方法調(diào)用的過程中, 不能修改doc的屬性.
// 但我們又要達(dá)到能夠修改doc的屬性, 所以把此任務(wù)放到這個(gè)方法的外面去執(zhí)行.
// 實(shí)現(xiàn)這一目的, 可以使用新線程, 但放到swing的事件隊(duì)列里去處理更輕便一點(diǎn).
SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, keywordStyle));
} else {
SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle));
}
return wordEnd;
}
因?yàn)樵趇nsertUpdate和removeUpdate方法中不能修改document的屬性, 所以著色的任務(wù)放到這兩個(gè)方法外面, 所以使用了SwingUtilities.invokeLater來實(shí)現(xiàn).
private class ColouringTask implements Runnable {
private StyledDocument doc;
private Style style;
private int pos;
private int len;
public ColouringTask(StyledDocument doc, int pos, int len, Style style) {
this.doc = doc;
this.pos = pos;
this.len = len;
this.style = style;
}
public void run() {
try {
// 這里就是對(duì)字符進(jìn)行著色
doc.setCharacterAttributes(pos, len, style, true);
} catch (Exception e) {}
}
}
七: 源碼
關(guān)鍵字著色的完成代碼如下, 可以直接編譯運(yùn)行. 對(duì)于數(shù)字, 運(yùn)算符, 字符串等的著色處理在以后的教程中會(huì)繼續(xù)進(jìn)行詳解.
import java.awt.Color;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class HighlightKeywordsDemo {
public static void main(String[] args) {
JFrame frame = new JFrame();
JTextPane editor = new JTextPane();
editor.getDocument().addDocumentListener(new SyntaxHighlighter(editor));
frame.getContentPane().add(editor);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setVisible(true);
}
}
/**
* 當(dāng)文本輸入?yún)^(qū)的有字符插入或者刪除時(shí), 進(jìn)行高亮.
*
* 要進(jìn)行語(yǔ)法高亮, 文本輸入組件的document要是styled document才行. 所以不要用JTextArea. 可以使用JTextPane.
*
* @author Biao
*
*/
class SyntaxHighlighter implements DocumentListener {
private SetString keywords;
private Style keywordStyle;
private Style normalStyle;
public SyntaxHighlighter(JTextPane editor) {
// 準(zhǔn)備著色使用的樣式
keywordStyle = ((StyledDocument) editor.getDocument()).addStyle("Keyword_Style", null);
normalStyle = ((StyledDocument) editor.getDocument()).addStyle("Keyword_Style", null);
StyleConstants.setForeground(keywordStyle, Color.RED);
StyleConstants.setForeground(normalStyle, Color.BLACK);
// 準(zhǔn)備關(guān)鍵字
keywords = new HashSetString();
keywords.add("public");
keywords.add("protected");
keywords.add("private");
keywords.add("_int9");
keywords.add("float");
keywords.add("double");
}
public void colouring(StyledDocument doc, int pos, int len) throws BadLocationException {
// 取得插入或者刪除后影響到的單詞.
// 例如"public"在b后插入一個(gè)空格, 就變成了:"pub lic", 這時(shí)就有兩個(gè)單詞要處理:"pub"和"lic"
// 這時(shí)要取得的范圍是pub中p前面的位置和lic中c后面的位置
int start = indexOfWordStart(doc, pos);
int end = indexOfWordEnd(doc, pos + len);
char ch;
while (start end) {
ch = getCharAt(doc, start);
if (Character.isLetter(ch) || ch == '_') {
// 如果是以字母或者下劃線開頭, 說明是單詞
// pos為處理后的最后一個(gè)下標(biāo)
start = colouringWord(doc, start);
} else {
SwingUtilities.invokeLater(new ColouringTask(doc, start, 1, normalStyle));
++start;
}
}
}
/**
* 對(duì)單詞進(jìn)行著色, 并返回單詞結(jié)束的下標(biāo).
*
* @param doc
* @param pos
* @return
* @throws BadLocationException
*/
public int colouringWord(StyledDocument doc, int pos) throws BadLocationException {
int wordEnd = indexOfWordEnd(doc, pos);
String word = doc.getText(pos, wordEnd - pos);
if (keywords.contains(word)) {
// 如果是關(guān)鍵字, 就進(jìn)行關(guān)鍵字的著色, 否則使用普通的著色.
// 這里有一點(diǎn)要注意, 在insertUpdate和removeUpdate的方法調(diào)用的過程中, 不能修改doc的屬性.
// 但我們又要達(dá)到能夠修改doc的屬性, 所以把此任務(wù)放到這個(gè)方法的外面去執(zhí)行.
// 實(shí)現(xiàn)這一目的, 可以使用新線程, 但放到swing的事件隊(duì)列里去處理更輕便一點(diǎn).
SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, keywordStyle));
} else {
SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle));
}
return wordEnd;
}
/**
* 取得在文檔中下標(biāo)在pos處的字符.
*
* 如果pos為doc.getLength(), 返回的是一個(gè)文檔的結(jié)束符, 不會(huì)拋出異常. 如果pos0, 則會(huì)拋出異常.
* 所以pos的有效值是[0, doc.getLength()]
*
* @param doc
* @param pos
* @return
* @throws BadLocationException
*/
public char getCharAt(Document doc, int pos) throws BadLocationException {
return doc.getText(pos, 1).charAt(0);
}
/**
* 取得下標(biāo)為pos時(shí), 它所在的單詞開始的下標(biāo). ?±wor^d?± (^表示pos, ?±表示開始或結(jié)束的下標(biāo))
*
* @param doc
* @param pos
* @return
* @throws BadLocationException
*/
public int indexOfWordStart(Document doc, int pos) throws BadLocationException {
// 從pos開始向前找到第一個(gè)非單詞字符.
for (; pos 0 isWordCharacter(doc, pos - 1); --pos);
return pos;
}
/**
* 取得下標(biāo)為pos時(shí), 它所在的單詞結(jié)束的下標(biāo). ?±wor^d?± (^表示pos, ?±表示開始或結(jié)束的下標(biāo))
*
* @param doc
* @param pos
* @return
* @throws BadLocationException
*/
public int indexOfWordEnd(Document doc, int pos) throws BadLocationException {
// 從pos開始向前找到第一個(gè)非單詞字符.
for (; isWordCharacter(doc, pos); ++pos);
return pos;
}
/**
* 如果一個(gè)字符是字母, 數(shù)字, 下劃線, 則返回true.
*
* @param doc
* @param pos
* @return
* @throws BadLocationException
*/
public boolean isWordCharacter(Document doc, int pos) throws BadLocationException {
char ch = getCharAt(doc, pos);
if (Character.isLetter(ch) || Character.isDigit(ch) || ch == '_') { return true; }
return false;
}
@Override
public void changedUpdate(DocumentEvent e) {
}
@Override
public void insertUpdate(DocumentEvent e) {
try {
colouring((StyledDocument) e.getDocument(), e.getOffset(), e.getLength());
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
@Override
public void removeUpdate(DocumentEvent e) {
try {
// 因?yàn)閯h除后光標(biāo)緊接著影響的單詞兩邊, 所以長(zhǎng)度就不需要了
colouring((StyledDocument) e.getDocument(), e.getOffset(), 0);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
/**
* 完成著色任務(wù)
*
* @author Biao
*
*/
private class ColouringTask implements Runnable {
private StyledDocument doc;
private Style style;
private int pos;
private int len;
public ColouringTask(StyledDocument doc, int pos, int len, Style style) {
this.doc = doc;
this.pos = pos;
this.len = len;
this.style = style;
}
public void run() {
try {
// 這里就是對(duì)字符進(jìn)行著色
doc.setCharacterAttributes(pos, len, style, true);
} catch (Exception e) {}
}
}
}
有哪些好用的代碼編輯器值得推薦?
給大家推薦8款最受程序員喜愛的代碼編輯器
1、Atom
Atom是Github打造的一款開源代碼編輯器,支持 macOS、Windows和Linux操作系統(tǒng),支持Node.js所寫的插件,并內(nèi)置由Github提供的Git版本控制系統(tǒng),也可被當(dāng)作 IDE 使用。
Atom的特色在于它極其豐富的可定制性,以及賞心悅目的界面。特別是自帶的代碼縮略圖和代碼折疊功能,不管是用Python還是做前端都非常好用。
2、EMACS
EMACS的強(qiáng)大之處在于已經(jīng)超出了編輯器的范疇,搞成了大的平臺(tái),很多開發(fā)人員在上面直接都以他為入口完成各種功能需求了。
主要有如下特性:上網(wǎng)瀏覽網(wǎng)頁(yè)看視頻,收發(fā)郵件,調(diào)試程序,玩游戲,計(jì)算器,;、文件比較,記日記,目錄管理
3、Notepad++
Notepad++被稱為是JAVA程序員的最愛,幾乎可以替代記事本的最佳編輯器,很多強(qiáng)大的功能集于一身。可以在Windows操作系統(tǒng)下編輯,有完整的中文化接口支持多國(guó)語(yǔ)言編寫的功能(UTF8技術(shù)),支持自定義語(yǔ)言。該程序還支持自動(dòng)完成某些編程語(yǔ)言的API子集。
4、Sublime Text
Sublime 是一種比Notepad++功能強(qiáng)大的多編輯器,現(xiàn)在很多前端開發(fā)人員都很喜歡,雖然代碼不開源,里面需要拿到注冊(cè)碼才能使用,但是它幾乎涵蓋了notepad++的所有特性,界面美觀功能全的編輯器。
主要有如下特性:
跨平臺(tái),幾乎在各個(gè)操作系統(tǒng)上都能使用
查找和替換功能做得非常友善
不僅支持多種語(yǔ)言關(guān)鍵字的高亮提示,還能針對(duì)編程語(yǔ)言編譯錯(cuò)誤給提示
支持插件功能
能夠支持多種布局方式
5、Brackets
Brackets是一款為L(zhǎng)inux開發(fā)者設(shè)計(jì)的開源代碼編輯器,使用Brackets寫代碼,你不會(huì)被任何事情所打斷。比如在寫HTML代碼時(shí),即便你沒有保存代碼也可以及時(shí)預(yù)覽你的Web頁(yè)面效果。你也可以使用Theseus來檢查變量,Brackets默認(rèn)提供一種主題,當(dāng)然你也可以在擴(kuò)展中心獲取更多的主題。
6、Vim
Vim 是一款高度可定制的文本編輯器,可以用于包括編寫代碼在內(nèi)的各種文本創(chuàng)建與編輯工作。
Vim 的特色在于,它可以僅僅通過鍵盤來在插入、執(zhí)行命令、文本批量處理等模式之中切換。這就使得 Vim 可以不用進(jìn)行菜單或者鼠標(biāo)操作,并且最小化組合鍵的操作。對(duì)文字錄入員或者程序員可以大大增強(qiáng)速度和效率。
7、Visual Studio Code
Visual Studio Code是目前最受歡迎的代碼編輯器。Visual Studio Code是一個(gè)由微軟公司發(fā)布的免費(fèi)開源且跨平臺(tái)的代碼編輯器,剛一問世,它就以強(qiáng)大的功能、美觀的界面、高度的可定制性,被譽(yù)為微軟的良心之作。
Visual StudioCode 內(nèi)置了代碼調(diào)試、Git 版本控制、代碼高亮、智能代碼補(bǔ)完、代碼片段管理、代碼重構(gòu)等豐富的功能。此外,VS Code 的用戶個(gè)性配置選項(xiàng)也很豐富,能方便地修改主題顏色、鍵盤快捷方式等各種屬性和參數(shù),還在內(nèi)置了擴(kuò)展程序管理的功能。
8、Eclipse
Eclipse以一種友好的集成開發(fā)環(huán)境,為各種類型的用戶,提供了一系列針對(duì)開發(fā)Web和Java應(yīng)用的可用工具。雖然專注于Java,但是也支持其他各種編程語(yǔ)言,如C ++、JavaScript、PHP、C、Perl、Fortran、Ruby、Python,甚至是COBOL。它還包括了適用于各種語(yǔ)言、向?qū)Ш蛢?nèi)置應(yīng)用程序以簡(jiǎn)化開發(fā)的源代碼和圖形編輯器,以及支持部署、運(yùn)行和測(cè)試app的工具和API。
Eclipse提供的插件功能相當(dāng)豐富,有助于更加簡(jiǎn)便地創(chuàng)建、集成和使用軟件工具,節(jié)省時(shí)間和金錢。
源碼編輯器如何使用變量來進(jìn)行積分
先設(shè)置一個(gè)變量 積分
積木如下:
當(dāng)(觸發(fā)某個(gè)條件)
使變量 積分 增加 (數(shù)字)
如何在源碼編輯器中設(shè)置聲音與文字同步
選擇音頻,然后選擇【踩點(diǎn)】,根據(jù)音頻的內(nèi)容進(jìn)行踩點(diǎn)標(biāo)記。完成踩點(diǎn)之后,我們就可以進(jìn)行文字編輯了,在【文字】里面打入視頻內(nèi)容,然后讓每一個(gè)短句的內(nèi)容和視頻踩點(diǎn)處對(duì)齊,即可完成音頻同步了。
在電腦端有另外的操作方法,我們只需要將音頻文字使用網(wǎng)上的轉(zhuǎn)換軟件,將音頻轉(zhuǎn)成文字,然后將文字文件導(dǎo)入到字幕模板中,將音頻和文字模板拉齊即可完成。特效/動(dòng)畫的添加方式也是一樣。在這里需要強(qiáng)調(diào)一下的是音頻導(dǎo)成文字的過程中,其實(shí)是會(huì)有很多匹配不正確的內(nèi)容,還是需要在導(dǎo)出后大家一一檢查,然后再制作。
一般來說最簡(jiǎn)單的字幕用白色字體就可以,然后根據(jù)音頻的風(fēng)格進(jìn)行字體的挑戰(zhàn),如古風(fēng)就比較適合一些毛筆字體。完成上面的音頻字幕同步操作之后,我們點(diǎn)擊文字,選擇【動(dòng)畫】,最后一步將視頻導(dǎo)出即可完成編輯。
源碼編輯器教程視頻建黨一百周年的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于建黨100周年視頻腳本、源碼編輯器教程視頻建黨一百周年的信息別忘了在本站進(jìn)行查找喔。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。