前言
這是博主學習完Swing後,使用Swing實現的一個簡單計算器。作簡單的計算器的目的是將最近所學的Swing給應用起來,寫博文介紹的目的是記錄作這個計算器的思路。下面將分爲界面和事件兩部分介紹。計算器的詳細代碼將在文末附上連接。html
計算器的界面
<img src="https://img2018.cnblogs.com/blog/1099419/201901/1099419-20190112233455315-1035188611.png" width=400 height=330 align=center>java
<img src="https://img2018.cnblogs.com/blog/1099419/201901/1099419-20190112233615283-789098344.png" width=400 height=330 align=center>git
菜單
使用到的控件類主要有JMenuBar
JMenu
JMenuItem
JRadioButtonMenuItem
ButtonGroup
。JMenuBar指的就是一個菜單條裏面要裝JMenu也就是上圖的編輯、查看、幫助菜單。可是咱們最終操做的單元還不是菜單,而是<b>菜單項</b>,也就是編輯下面的複製、粘貼等。菜單項有像複製粘貼這樣的普通菜單項,也有單選菜單項下拉菜單列表等。使用ButtonGroup的目的是爲了使查看下面的單選菜單項每次只能選擇一個。下圖是計算器中的菜單內容:github
<img src="https://img2018.cnblogs.com/blog/1099419/201901/1099419-20190112233650993-734013013.png" width=200 height=150 align=center> <img src="https://img2018.cnblogs.com/blog/1099419/201901/1099419-20190112233811933-879298358.png" width=200 height=150 align=center> <img src="https://img2018.cnblogs.com/blog/1099419/201901/1099419-20190112233921647-593949998.png" width=200 height=150 align=center>佈局
顯示框和輸入框
界面的總體佈局是使用BorderLayout
,顯示框和輸入框使用的組件是JTextField
,是放置在NORTH方位,前面博文介紹過佈局得知BorderLayout佈局有東南西北中五個方位可是每一個方位只能放置一個組件。因此使用JPanel
容器將兩個組件裝在一塊兒,而後<b>將JPanel容器放在界面的北部</b>。學習
按鈕區
按鈕區使用的組件是JButton
,使用了GridBagLayout
佈局。GridBagLayout是一種靈活的網格佈局方式,使用GridBagConstraints
能夠指定每一個組件的所佔網格的大小以及容器擴大時組件變化大小等。spa
//設置按鈕區的佈局 private void setButtonsLayout() { GridBagLayout gbLayout = new GridBagLayout(); buttons.setLayout(gbLayout); GridBagConstraints gbCons = new GridBagConstraints(); gbCons.fill = GridBagConstraints.BOTH; gbCons.insets = new Insets(5, 5, 5, 5); gbCons.weightx = 4; //組件縱向比例爲3:4 gbCons.weighty = 3; JButton jbt = null; jbt = new JButton("Backspace"); gbCons.gridx = 1; gbCons.gridy = 0; gbCons.gridwidth = 2; //橫向佔兩格 buttons.add(jbt,gbCons); jbt = new JButton("CE"); gbCons.gridx = 3; gbCons.gridy = 0; gbCons.gridwidth = 2; //橫向佔兩格 buttons.add(jbt, gbCons); jbt = new JButton("C"); gbCons.gridx = 5; gbCons.gridy = 0; gbCons.gridwidth = 1; buttons.add(jbt, gbCons); String[] butsStr = {"MC","7","8","9","/","MR","4","5","6","*","MS","1","2","3","-","M+","0","+/-",".","+"}; int k=0; for(int i=1;i<5;i++) { for(int j=0;j<5;j++) { gbCons.gridx = j; gbCons.gridy = i; buttons.add(new JButton(butsStr[k]), gbCons); k++; } } jbt = new JButton("sqrt"); gbCons.gridx = 5; gbCons.gridy = 1; buttons.add(jbt, gbCons); jbt = new JButton("1/x"); gbCons.gridx = 5; gbCons.gridy = 2; buttons.add(jbt, gbCons); jbt = new JButton("="); gbCons.gridheight = 2; gbCons.gridx = 5; gbCons.gridy = 3; buttons.add(jbt, gbCons); }
結果顯示列表
結果顯示列表使用的組件類爲JList
和DefaultListModel
。JList是列表容器,使用DefaultListModel想列表容器中添加列表項。code
計算器的事件
計算器的事件主要爲按鈕區按鈕的點擊事件(點擊數字按鈕運算按鈕後結果計算)以及結果顯示列表的選擇事件和一個右擊彈出菜單的鼠標右擊事件。htm
<img src="https://img2018.cnblogs.com/blog/1099419/201901/1099419-20190112234008478-1747423278.png" width=400 height=330 align=center>blog
小結
整個計算器的運算規則是仿造win10系統自帶的計算器實現的,其中sqrt運算沒有實現,以及+/-符號替換沒有實現,有待補充,其他基本的仍是已經實現。事件的處理機制,在AWT/Swing——事件處理中已經介紹過,這裏我就再也不重複說啦。關於界面和事件是如何設置的代碼沒有詳細分析,下面會貼上源碼網址,詳細的解釋都在代碼註釋中。