我們可以對已完成的畫圖板進行修飾,今天主要是添加一些新的功能。
一、繪製曲線
繪製曲線的思路與繪製直線類似,需要用到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);
}
小結
還有更多的功能和改進,會在之後的博客中提及。