2017軟件工程實訓 15331023 陳康怡html
Vi是linux系統的標準文本編輯器,採用指令的方式進行操做,此處僅記錄部分經常使用的指令。java
vi編輯器分爲三種模式:linux
(1)命令行模式 command modeweb
命令行模式可控制光標移動,刪除字符、字、行,複製剪切等操做。在命令行模式下按i進入插入模式,按:進入底行模式。編程
(2)插入模式 insert modeapi
在插入模式下,能夠進行文字輸入。在插入模式下,按Esc回到命令行模式。安全
(3)底行模式 last lint modeoracle
主要進行保存退出的操做,也能夠設置編輯環境。框架
(1)打開文件編輯器
在Terminal中使用$ vi filename 便可用vi打開文件,若文件不存在,vi會本身建立新文件。
(2)退出vi
在底行模式中,輸入:
:w filename ——將文本以文件名filename保存
:wq ——保存並退出vi
:q! ——不保存強制退出vi
(1)移動光標:
使用鍵盤上的h,j,k,l來分別控制光標向左,下,上,右移動。
(2)刪除(可在操做前加數字表示刪除多個):
x ——刪除光標後的一個字符
X ——刪除光標前的一個字符
dd ——刪除光標所在行
(3)撤銷:
u ——撤銷上一次操做
(1)列出行號 —— :set nu
(2)跳到某一行 —— :#
(3)保存 —— :w
本週主要學習了Java下簡單GUI程序的編寫。Java下GUI程序編寫主要使用了java.awt以及jawax.swing的庫。
java的GUI程序的基本思路是以JFrame對象爲基礎,加入不一樣的控件如JButton,JTextField等控件實現不一樣的交互功能及佈局,再用java代碼實現功能邏輯。
這是我在這周實訓中寫的簡單計算器中的一些代碼片斷。這裏結合代碼記錄學習所得。完整代碼見學習記錄末尾。
private JFrame myframe = new JFrame("Calculator"); private JButton plusButton = new JButton("+"); private JTextField equalText = new JTextField("=");
這一段是聲明計算器中的框架以及控件。首先JFrame myframe = new JFrame("Calculator");
聲明瞭一個JFrame對象。JFrame對象是Java GUI編程中的基礎。它生成了一個程序窗體,窗體名稱叫Calculator,以後你能夠往JFrame中添加控件。接下來聲明瞭JButton對象和JTextField對象,用於生成計算器上不一樣操做的按鈕,以及輸入操做數、輸出結果的文本框對象。
//省略了部分功能類似代碼 protected void generateFrame() { //設置窗體大小 myframe.setSize(500,200); //設置窗體佈局 myframe.setLayout(new GridLayout(0,5)); //設置控件屬性 equalText.setEditable(false); equalText.setHorizontalAlignment(SwingConstants.CENTER); //將控件插入窗體 myframe.add(operand1); //將窗體設置爲可見,且關閉窗體時退出進程 myframe.setVisible(true); myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
聲明完之後,咱們就能夠在generateFrame
函數中對窗體進行進一步的操做。代碼的功能具體見註釋。
這裏有意思的地方主要有設置窗體佈局和設置控件屬性。Java Swing提供了多種佈局方法:
(1)FlowLayout:將控件逐個添加到窗口中,從左往右一字排開,直至沒有空間剩餘才換到下一行。
(2)BorderLayout:將界面分紅5個區域,分別用BorderLayout的常量指定:
1.-PAGE_START
2.-PAGE_END
3.-LINE_START
4.-LINE_END
5.-CENTER
(3)BoxLayout:能夠控制控件水平或豎直地插入窗體。
(4)CardLayout:每次僅顯示一個控件,可切換顯示。
(5)GridLayout:控件會自動排列成指定行列數,且每一個控件大小相同。
(6)GridBagLayout:最複雜、功能最強大的佈局,能夠實現不規則的網格狀佈局。
詳見:swing佈局管理
Swing還提供了一些經常使用的佈局用的靜態常量,例如居中能夠用SwingContants.CENTER
,除此以外還有BOTTOM, EAST, WEST等可供使用,至關方便。詳見:SwingContants
public void addListener() { plusButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operator.setText("+"); } }); equalButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String op1 = operand1.getText(); String op2 = operand2.getText(); String opt = operator.getText(); String formula = op1+opt+op2; try { result.setText(""+ jse.eval(formula)); } catch (ScriptException e1) { // TODO Auto-generated catch block logger.warning(e1.toString());; } } }); }
這段代碼的做用是給各個按鈕加上監聽器,當按鈕被點擊時,觸發對應的函數。此處等於號的運算,我引用了Javascript引擎中的eval函數,能夠對字符串直接運算得出結果,至關方便。缺點是有安全隱患。
ant是一種相似與C++下的makefile相似的編譯機制,經過ant能夠清晰方便地定義依賴關係,方便編譯且提升效率。跟makefile相同,已經編譯且沒有改變的文件,ant不會重複編譯。
ant採用XML語法,相似於web中的HTML語言的標籤,利用Eclipse,咱們能夠輕易地獲得模板,並在模板上進行修改。這裏主要記錄幾個經常使用的標籤。
(1) <property name="xxx" value="yyy"/>
此處聲明瞭屬性,便可在後文中使用${xxx}
來代替yyy
,尤用於文件路徑,避免了文件路徑變更致使build.xml中多處改動的狀況。
(2)<target name="secondstep" depends="firststep"></target>
target標籤表示ant執行的步驟,target執行順序由depends屬性決定,當該target的depends屬性指向的target都已經執行完畢後,纔會執行。
(3)<javac srcdir="${src.path}" destdir = "${build.path}"></javac>
javac標籤用於編譯java文件。
(4)<java classname="test" classpath="${build.path}"></java>
java標籤用於執行class程序。
(5)<junit printsummary="true"><test name="testTest"></test></junit>
junit標籤用於在ant中執行junit單元檢測,test標籤爲測試的名稱。
更多ant標籤及其屬性詳見:ant如何編譯項目
junit是java單元測試工具,其優點在於簡化了單元測試的工做。這裏記錄一些在學習junit過程當中學習的知識。
元數據:記錄數據的數據。junit中經常使用的元數據有:
@Test
:測試
@Before
:使用了該元數據的方法在每一個測試方法執行以前都要執行一次。
@After
:使用了該元數據的方法在每一個測試方法執行以後要執行一次。
@Test(timeout=xxx)
:該元數據傳入了一個時間(毫秒)給測試方法,若是測試方法在制定的時間以內沒有運行完,則測試也失敗。
@ignore
:該元數據標記的測試方法在測試中會被忽略。
重要函數:assertEquals(aaa, bbb)
——junit會對assertEquals中的aaa和bbb進行判斷,若不相等則會返回failure。這是重要的測試函數。
以上就是第一週的學習記錄。
下附Java GUI部分Calculator的完整代碼。
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.logging.Logger; public final class Calculator { private Calculator(){} public static void main (String args[]) { CalFrame myFrame = new CalFrame(); myFrame.generateFrame(); myFrame.addListener(); } } class CalFrame { CalFrame() {} private JFrame myframe = new JFrame("Calculator"); private static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); private static String strClassName = CalFrame.class.getName(); private static Logger logger = Logger.getLogger(strClassName); private JButton plusButton = new JButton("+"); private JButton minusButton = new JButton("-"); private JButton multiplyButton = new JButton("*"); private JButton divideButton = new JButton("/"); private JButton equalButton = new JButton("="); private JTextField equalText = new JTextField("="); private JTextField operand1 = new JTextField(""); private JTextField operand2 = new JTextField(""); private JTextField operator = new JTextField(""); private JTextField result = new JTextField(""); protected void generateFrame() { myframe.setSize(500,200); //layout setting myframe.setLayout(new GridLayout(0,5)); //other settings equalText.setEditable(false); operator.setEditable(false); result.setEditable(false); equalText.setHorizontalAlignment(SwingConstants.CENTER); operand1.setHorizontalAlignment(SwingConstants.CENTER); operand2.setHorizontalAlignment(SwingConstants.CENTER); operator.setHorizontalAlignment(SwingConstants.CENTER); result.setHorizontalAlignment(SwingConstants.CENTER); //add listeners //add component myframe.add(operand1); myframe.add(operator); myframe.add(operand2); myframe.add(equalText); myframe.add(result); myframe.add(plusButton); myframe.add(minusButton); myframe.add(multiplyButton); myframe.add(divideButton); myframe.add(equalButton); //visible setting myframe.setVisible(true); myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void addListener() { plusButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operator.setText("+"); } }); minusButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operator.setText("-"); } }); multiplyButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operator.setText("*"); } }); divideButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operator.setText("/"); } }); equalButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String op1 = operand1.getText(); String op2 = operand2.getText(); String opt = operator.getText(); String formula = op1+opt+op2; try { result.setText(""+ jse.eval(formula)); } catch (ScriptException e1) { // TODO Auto-generated catch block logger.warning(e1.toString());; } } }); } }