闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掆偓杩濋梺閫炲苯澧撮柡灞剧〒閳ь剨缍嗛崑鍛暦瀹€鍕厸鐎光偓閳ь剟宕伴弽顓溾偓浣糕槈濡嘲鐗氶梺鍛婂姉閸嬫挸袙婢跺绻嗛柣鎰典簻閳ь剚鍨垮畷鏇熺節濮橆剛顔嗛梺璺ㄥ櫐閹凤拷 (0) +1 闂傚倸鍊搁崐宄懊归崶褏鏆﹂柛顭戝亝閸欏繒鈧箍鍎遍幏瀣触鐎n喗鐓曢柍鈺佸枤濞堛垹霉绾攱瀚� (0) +1 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂撮檷閸嬫垿鎮楀☉娆嬬細妞も晜鐓¢弻锝夊箣閿濆棭妫勭紓浣哄閸ㄥ爼寮婚妸鈺傚亞闁稿本绋戦锟� (0) +1
闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掆偓杩濋梺閫炲苯澧撮柡灞剧〒閳ь剨缍嗛崑鍛暦瀹€鍕厸鐎光偓閳ь剟宕伴弽顓溾偓浣糕槈濡嘲鐗氶梺鍛婂姉閸嬫挸袙婢跺绻嗛柣鎰典簻閳ь剚鍨垮畷鏇㈠蓟閵夈儱鐎梺绉嗗嫷娈旈柦鍐枛閺岋綁寮崶銉㈠亾閳ь剟鏌涚€n偅灏柍钘夘槸閳诲秹顢樿缁ㄥジ鏌熸笟鍨鐎规洘鍎奸ˇ顕€鏌¢埀顒勬嚍閵夛絼绨婚梺鍝勬川閸嬬偤藟閻愮儤鍊垫慨妯煎亾鐎氾拷闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈠Χ閸℃ぞ绮℃俊鐐€栭崝褏绮婚幋鐘差棜闁秆勵殕閻撴洟鏌熼柇锕€鐏遍柛銈咁儔閺屻倝寮堕幐搴′淮闂佸搫鏈粙鎴﹀煡婢跺ň鏋庨柟閭﹀枤閳诲繒绱撻崒姘偓椋庢媼閺屻儱鐤鹃柣妯款嚙閽冪喖鏌i弮鍌楁嫛闁轰礁绉电换婵囩節閸屾碍鐏撻梺鍝勬-閸樺ジ鈥旈崘顔嘉ч柛鎰╁妼婵兘姊洪悷鏉挎闁瑰嚖鎷�>>
0

正在阅读:跟我学Java Swing之游戏设计(2)跟我学Java Swing之游戏设计(2)

2005-10-14 10:46 出处: 作者:张剑 责任编辑:xietaoming

  巧用JButton做文章

  JButton是一个按钮控件,它也是Swing中普通得不能再普通的控件了,尽管如此,我们还是需要花费一点功夫来了解和使用它,因为当你能够熟练使用JButton后,你会发现其他的Swing控件也是如此的相似。

  如果你将刚才写好的程序拿来运行,你会发现:游戏区的按钮总是排得满满的,这对实际游戏的操作非常不便,所以,我们得想办法让一部分格子空出来。GridLayout布局什么都好,就是在添加控件的时候不能跳过某一个格子,这下可怎么办呢?

  其实这也不难,既然GridLayout不让跳过,如果我们让某个格子内添加的控件与GridLayout布局的背景融为一体,这样在视觉上就达到了一致的效果。此外,假如别人在无意中点击到这个格子上,按钮仍然就会原形毕露,我们还得想办法让按钮不能被点击,这就需要用到JButton的setEnabled()方法。最后,对于能够点击的按钮,当它们被点击时,我们还得要区分出来究竟是哪一个按钮被点击了。

  在上一次实现“关于”功能的时候,我们使用了e.getSource()方法来判断鼠标点击事件产生的源,然而,那只对已经命名好了的控件比较有效。这里,使用数组表示按钮无疑是最好的方法了,首先让我们将上面的代码修改一下:

JButton[] dots = new JButton[ROW * COLUMN];
for (int i = 0; i < ROW * COLUMN; i++) {
  dots[i] = new JButton("Kyodai");
  dots[i].setActionCommand("" + i);
  contentPanel.add(dots[i]);
  dots[i].addActionListener(this);
}

  千万别忘记了在循环体中写上dots[i] = new JButton("Kyodai"),虽然在前面定义、使用了dots组数,然而,这仅仅只是告诉程序我们需要使用一些JButton,但是,这些JButton却依然没有被初始化。同时,我们不仅使用setActionCommand()为按钮制定了事件名称,还使用了addActionListener()方法为每个按钮加上了事件响应处理。

  关于事件响应的代码,我们可以在原来actionPerformed()事件代码的后面添加:

if (e.getSource() instanceof JButton) {
  JButton button = (JButton) e.getSource();
  int offset = Integer.parseInt(button.getActionCommand());
  int row, col;
  row = Math.round(offset / COLUMN);
  col = offset - row * COLUMN;
  JOptionPane.showMessageDialog(this,"ROW="+row+",COL="
      + col, "按钮", JOptionPane.INFORMATION_MESSAGE);
}

  在上面的代码中,e.getSource() instanceof JButton用来判断产生的事件是否是由JButton型的控件产生的,然后又将产生事件源的控件进行强制型类转换,再使用Integer.parseInt(button.getActionCommand())方法将取得的事件名称转化为整数,后面的代码就将这个整数还原成行和列的信息。

  好了,现在运行程序,然后点击每个按钮,看看是否会出现如右图的对话框?

  注意哦,我们的下标是从0开始的。本期程序源代码(点击下载)。

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗ù锝堟缁€濠傗攽閻樻彃鈧绱撳杈ㄥ枑闁哄啫鐗勯埀顑跨窔瀵粙顢橀悙鑼垛偓鍨攽閿涘嫬浠х紒顕呭灦瀵偊鎮╃紒妯锋嫼闂備緡鍋嗛崑娑㈡嚐椤栨稒娅犻柟缁㈠枟閻撴瑦銇勯弮鈧娆忈缚閹扮増鐓欑€瑰嫮澧楅崵鍥┾偓瑙勬磸閸斿秶鎹㈠┑瀣<婵炲棙鍔栭埢鏇熺節閻㈤潧啸妞わ綀妫勫嵄闁告稒娼欑壕濠氭煙閹规劦鍤欑紒鐙€鍨堕弻銊╂偆閸屾稑顏�闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏇炲€哥粻鏍煕椤愶絾绀€缁炬儳娼¢弻鐔煎箚閻楀牜妫勭紒鎯у⒔缁垳鎹㈠☉銏犵婵炲棗绻掓禒濂告⒑閸濆嫬顏ラ柛搴f暬楠炲啫顫滈埀顒勫箖濞嗘挸绾ч柛顭戝枤瑜版垵鈹戦悙鑼憼缂侇喖绉堕崚鎺楀箻鐠囪尪鎽曞┑鐐村灟閸╁嫰寮崘顔界叆婵犻潧妫欓ˉ鐘炽亜閿斿搫鍔︽慨濠冩そ瀹曘劍绻濋崘鐐棝闂備胶鎳撻崵鏍箯閿燂拷