2013-04-29 23 views
2

我有此代碼爲什麼這個按鈕仍然填滿整個框架?

package com.net.Forms; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class MainForm { 

    protected static JFrame window = new JFrame("Test Form"); 
    protected static JButton btnOK = new JButton("OK!"); 

    public static void Main() { 
     load(); 
     return; 
    } 
     public static void load() { 
     window.setSize(500, 500); 
     window.setVisible(true); 
     //btnOK.setSize(50, 50); //here 
     window.add(btnOK); 
     btnOK.setEnabled(true); 
     btnOK.setVisible(true); 


     } 

} 

爲什麼按鈕仍填充所述幀,而不是爲50×50像上面我

指出任何幫助,將理解

+1

閱讀['BorderLayout'](http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html)。這是'JFrame'的默認佈局管理器。 – mre 2013-04-29 17:25:44

+0

請參閱http://stackoverflow.com/questions/5714214/set-size-wont-work-in-java – 2013-04-29 17:47:52

回答

5

JFrame的默認佈局是BorderLayout。這就是爲什麼當你添加JButton時,它會將JButton添加到center並將其擴展到覆蓋整個窗口。 BorderLayout不尊重組件被添加到他們的setSize(..)方法。如果您仍然希望給要添加到JFrame的組件添加首選大小,則應該將佈局更改爲FlowLayoutGridLayout或其他..然後在組件中使用setPreferredSize(..)方法,同時將其添加到JFrame。例如您的代碼可以按照以下方式修改。

import java.awt.*; 
import javax.swing.*; 

public class MainForm { 

    protected JFrame window = new JFrame("Test Form"); 
    protected JButton btnOK = new JButton("OK!"); 

    public static void main(String st[]) { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       MainForm mf = new MainForm(); 
       mf.load(); 
      } 
     }); 

    } 
    public void load() { 
    Container c = window.getContentPane(); 
    c.setLayout(new FlowLayout());//Set layout to be FlowLayout explicitly. 
    btnOK.setPreferredSize(new Dimension(100,50));//use set PreferredSize 
    c.add(btnOK); 
    c.setSize(500, 500); 
    c.setVisible(true); 
    } 

} 
+0

謝謝你的工作 – 2013-04-29 17:52:31

+1

[我應該避免在Java Swing中使用set(Preferred | Maximum | Minimum)尺寸方法](http://stackoverflow.com/q/7229226/230513)? – trashgod 2013-04-29 18:36:42

+0

@trashgod:那麼你在這種情況下建議什麼? – 2013-04-29 18:40:19

-2

它只是一個錯誤或某事。 添加到框架的最後一個元素取其全部。

所有你需要做的:
聲明像一個JL​​abel()
一個新的簡單的組件將其添加到幀。
不要爲它設置邊界或大小,只要一個新的標籤。
請確認此標籤是添加到框架中的最後一個元素。
希望它有效。

+0

歡迎來到SO!請查看[如何回答](https://stackoverflow.com/help/how-to-answer)頁面。這個問題已經有了非常詳細的答案,並且在4年前已經被接受。很遺憾,您的答案不會提供任何有助於OP或公衆研究此問題的其他信息。 – JNYRanger 2017-07-21 14:11:49

相關問題