java畫圖板之功能補充(一)

    我們可以對已完成的畫圖板進行修飾,今天主要是添加一些新的功能。

一、繪製曲線

    繪製曲線的思路與繪製直線類似,需要用到MouseMotionListener。

  • 首先添加按鈕“曲線”,此時,我們for循環添加按鈕的優勢便體現出來了,只需要在textArr[]中添加即可。
// 添加組件(按鈕)
String textArr[] = {"改變粗細", "直線","曲線", "點", "迭代" ,"平面山水畫","地貌圖"};
for (String text : textArr) {
	JButton btn = new JButton(text);
	Dimension botton = new Dimension(100, 30);
	btn.setPreferredSize(botton);
	ui.add(btn);
	btn.addActionListener(mousel);
}
  • 設置監聽器,需要注意,之前使用的是MouseListener,即便我們將MouseMotionListener和MouseListener都放在同一個類中實現,在給窗體或者組件添加監聽器時也要分別添加
MyListener mousel = new MyListener();
ui.addMouseListener(mousel);
ui.addMouseMotionListener(mousel);
  • 實現監聽器中的MouseDragged方法,這個監聽器只要鼠標按下,就會一直循環,不需要額外再添加循環語句了。
public void mouseDragged(MouseEvent e) {
	if (bottonText.equals("曲線")) {
		g.fillOval(e.getX(), e.getY(), r, r);
	}
}

輸出結果

曲線
    儘管實現了繪製曲線的功能,還是有問題存在。MouseDragged方法返回座標值太慢了,如果我們加快繪製速度,就會出現曲線間斷的情況。

二、改變線條和點的粗細

    我們使用的是fillOval方法來繪製點和部分線條的,對於這些圖案,我們可以通過改變半徑r來改變點和線條的粗細。

if (r > 20)
	r -= 20;
else
	r += 5;

我們通過設置最大值和變化區間來控制半徑r的變化,這樣可以實現多個檔位的變化。

輸出結果

粗細
    接下來,我還會嘗試使用GridBagLayout 類中的滑動條實現相對平滑的調節大小。

三、添加菜單欄

    我們暫時只是添加菜單欄組件,功能的實現會放在後面的博客中。
    需要使用的是JMenuBar、JMenu和JMenuItem三個類。

菜單欄
    與添加按鈕的方式相同,我們使用for循環進行相同組件的添加,方便以後的修改。

//添加菜單欄
JMenuBar menubar = new JMenuBar();
ui.setJMenuBar(menubar);
//設置菜單和子菜單文本
String MenuTextArr[] = { "文件", "編輯", "幫助" };
String MenuItem[][] = { { "新建文件", "打開文件", "保存文件", "關閉文件" }, { "清空", "撤銷" }, { "使用說明", "製作人員" } };
//添加菜單和子菜單
for (int i=0;i<MenuTextArr.length;i++) {
	JMenu menu = new JMenu(MenuTextArr[i]);
	//將子菜單添加到對應菜單上		
	for(int j=0;j<MenuItem[i].length;j++) {
		JMenuItem subMenu=new JMenuItem(MenuItem[i][j]);
		subMenu.addActionListener(mousel);
		menu.add(subMenu);
	}
	//將菜單添加到菜單欄上
	menubar.add(menu);
}

小結

    還有更多的功能和改進,會在之後的博客中提及。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章