轉自:http://lookbing.iteye.com/blog/518139
最後在做一個俄羅斯方塊的小遊戲,看著視頻做挺簡單的,都是手把手的,一行代碼一行代碼的教.. 自己親自動手做,才發現難,真難.在介面布局這塊就出問題,走不動了. 遊戲主要分三塊顯示區, 主遊戲區,下一個遊戲圖形區,遊戲狀態區(速度,得分)
每一個顯示區放在一個JPanel中,用了N種布局方式,顯示出來總有問題.
1. BorderLayout的時候,中間地區總是最大,右邊顯示不出介面(右邊大小總是很小,用jpanel.setSize()改變JPANEL大小不管用), 這種布局方式本來就是左右寬度不變,上下高度不變,在視窗改變大小的時候.
2. FlowLayout的時候,兩個jpanel顯示出來了,但是只有一丁點小.如上設定大小不管用.
3. gridLayout的時候,兩個jpanel總是一樣的大,但是這太不符合遊戲風格了吧,左邊的主遊戲區要大一些才合理.
最後不得己,採用絕對位置的方式來布局,勉強算過去了,但是心一直不安,Swing不會這麼菜,布局這麼欄,這點功能都實現不了?
在網上搜尋了很久,用Eclipse不斷的嘗試小程式,.終於還是讓我發現了問題的根源.[size=medium]在設定JPanel大小的時候,要用JPanel.setPreferredSize()這個方法才行.哈哈,問題總算是解決了,回去後再改代碼吧.用這個方法改JPanel大小之後,立馬顯示出來效果,大borderLayout中上下左右就可以控制寬度了.哈哈
以下是個小小的測試代碼
[/size]
Java代碼 import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JToolBar; public class MainFrame extends JFrame{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MainFrame mai=new MainFrame(); mai.setLayout(new BorderLayout()); JToolBar jtoolbar=new JToolBar(); JLabel jl=new JLabel("state"); jtoolbar.add(jl); JPanel jpanel1=new JPanel(); JButton jb1=new JButton("North"); jpanel1.setPreferredSize(new Dimension(300, 150));//關鍵代碼,設定JPanel的大小 jpanel1.add(jb1); jpanel1.setBorder(BorderFactory.createEtchedBorder()); JButton jb2=new JButton("Center"); mai.add(jpanel1,BorderLayout.EAST); mai.add(jb2,BorderLayout.CENTER); mai.add(jtoolbar,BorderLayout.SOUTH); mai.setSize(300, 400); mai.setVisible(true); mai.setDefaultCloseOperation(EXIT_ON_CLOSE); } }