Java swing
猜拳遊戲是一個非常典型的範例, 簡單且能快速熟悉每種UI SDK的設計概念, 所以一定要自已親手作一遍.
使用Java swing設計剪刀石頭布的結果如下圖. 本範例中使用BoxLayout安排每個Panel的排列方式.
Java的Layout管理方式有BorderLayout(只能水平), BoxLayout, GridLayout(表格), GridBagLayout(表格可合併儲存格), CardLayout. 這需自行慢慢體會.
開新專案
使用Java Swing製作視窗專案時, 在開啟專案中,記得需取消勾選Create Main Class, 如下圖所示.
開啟完成後, 再於Source Packages按右鍵/New/JFrame form, 名稱自訂
JPanel
上面的圖,分為顯示圖片的區域,結果,及按鈕。所以先拉三個JPane到視窗中,再於外層的JPanel按右鍵/Set Layout/BoxLayout
然後設定BoxLayout的方向,選取Axis, XAxis為由左到右排列,YAxis為由上到下排列
此時因每個JPanel不容易看到,所以可以改變Border/BevelBorder, Type若為Raised,JPanel就是凸出。若選擇Lowered,就會呈現凹陷的感覺。結果如下
元件大小比例
BoxLayout 是一個蠻方便的視窗管理工具, 尤如C#的StackPanel或Python的BoxSizer, 會由左而右或由上而下排列元件.
在設計UI畫面時, 都是以實際大小設計, PreferredSize是主要顯示的大小, 縮放時, 會依比例放大縮小, 最大值不會超過maximumSize, 最小值不會小於minimumSize. 所以這三個值都要設定.
因此在設計大小值時, 首先先決定正常顯示時的PreferredSize, 然後再決定放大後的maximumSize, 然後再決定縮小後的minimumSize。
因此,接下來最上列加入4個JPanel, ,Layout一樣是BoxLayout。左右二個Panel的maximumSize設定為[32762,165],那麼在縮放時,左右二邊的空格就會自動加大。
而中間二個Panel, 分別加為二個Label, 大小分別為[200,15], [200,150]
致於第二列則加為Panel+Label+Panel.
第三列則加入Panel+Button+Button+Button+Panel
完整代碼
請於private void btnActionPerformed()方法中輸入如下代碼
private void btnActionPerformed(java.awt.event.ActionEvent evt) { JButton btn=(JButton)evt.getSource(); int player=0; if(btn.getName().equals("scissors")){ lblPlayer.setIcon( new ImageIcon(getClass().getResource("scissors.png"))); player=0; } else if (btn.getName().equals("rock")){ lblPlayer.setIcon( new ImageIcon(getClass().getResource("rock.png"))); player=1; } else{ lblPlayer.setIcon( new ImageIcon(getClass().getResource("paper.png"))); player=2; } int cmp=(int)(Math.random()*3); if (cmp==0)lblCmp.setIcon( new ImageIcon(getClass().getResource("scissors.png"))); else if (cmp==1)lblCmp.setIcon( new ImageIcon(getClass().getResource("rock.png"))); else lblCmp.setIcon( new ImageIcon(getClass().getResource("paper.png"))); switch(cmp-player){ case 0: lblResult.setText("平手"); break; case -1: case 2: lblResult.setText("You Win"); break; case 1: case -2: lblResult.setText("You Loss"); break; } }
完整代碼下載 : GameRock_java.zip