3 回答

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
程序主類MainFrame繼承自JFrame,然后又來了個(gè)成員JFrame frame;,你到底想用誰來顯示?
如果主類繼承自JFrame,一般情況下在main函數(shù)中new 一個(gè)主類實(shí)例就可以了,這個(gè)實(shí)例就是個(gè)JFrame,可以作為主界面。
如果主類沒有繼承自JFrame,那需要在類成員里設(shè)置一個(gè)JFrame型的成員,new之,再setVisible(true)之。
你全做了。。。。
你的mainframe()函數(shù)用的反倒還是父類JFrame的功能。那你的那個(gè)JFrame型的frame做什么用的?
至于你提的問題,你已經(jīng)將窗口設(shè)置為FlowLayout布局了,那么就得按FlowLayout的規(guī)則去設(shè)置界面。在FlowLayout布局下,每個(gè)組件的大小是自動(dòng)取最合適(其實(shí)是最合適的小)的。你自己調(diào)用的setSize、setLocation、setBounds都不會(huì)有效的。
這三個(gè)函數(shù)只在自定義布局下有效,也就是:先setLayout(null)l;,但這樣一來,你所有其它組件也必須使用這三個(gè)函數(shù)設(shè)置大小和位置了,很麻煩。
java中的布局不是那么簡單的。如果單做代碼就想構(gòu)造好界面,沒有2、3年功力做不到的。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
至于為什么setBounds()沒有效果的原意是:
你用了setLayout(FlowLayout())。
這樣一來,F(xiàn)lowLayout中所定義的Bounds屬性會(huì)覆蓋掉你自己的Bounds屬性。所以你的setBounds()函數(shù)就不起作用了。
解決辦法:
(1)用FlowLayout默認(rèn)的Bounds屬性;
(2)setLayout(null);然后再設(shè)置setBounds();
當(dāng)然,第二種方法會(huì)沒有布局管理器。
呵呵~~哪種方法你自己衡量一下吧!

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
setBounds()不能和布局器結(jié)合使用,用戶只能使用一項(xiàng),否則setBounds()就會(huì)失效
- 3 回答
- 0 關(guān)注
- 3023 瀏覽
添加回答
舉報(bào)