2013-07-04 14 views
0

是的,我是一個Java初學者...有人可以告訴我,爲什麼JTextField位於整個JFrame而不是(300,50)到(450,75)像我在setBounds輸入?JTextField在整個JFrame而不是我確定的區域

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

public class Chat extends JFrame { 

    JTextField t=new JTextField(""); 

    public Chat() { 
     setVisible(true); 
     setSize(900, 300); 
     t = new JTextField(); 
     t.setBounds(300, 50, 150, 25); 
     add(t); 
    } 

} 
+1

先看看[如何使用佈局管理器](http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html)和[佈局管理器的可視化指南](http ://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)。他們可能看起來像一個奇怪的想法開始,但他們將保存你的理智和頭髮長期運行...... – MadProgrammer

回答

1

導致JFrame的默認佈局是BorderLayout,當你添加組件,如果你不指定它將把在中心。我建議使用另一種佈局,如 GridBagLayout

例子:

public Chat() { 
     setSize(900, 300); 
     t = new JTextField(); 
     t.setPreferredSize(new Dimension(x,y)); 
     GridBagConstraints gridBagConstraints = new GridBagConstraints(); 
     gridBagConstraints.gridx = 6; 
     gridBagConstraints.gridy = 7; 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridBagLayout()); 
     panel.add(t,gridBagConstraints); 
     add(panel); 
     pack(); // this sizes the frame 
     setVisible(true); // call set visible after adding components 
} 

應該考慮閱讀本Using Layout Managers

+0

謝謝,但我在gridBagConstraints:gridBagConstraints不能解析爲變量的異常。 – user2551736

+0

@ user2551736'GridBagConstraints gridBagConstraints'你必須定義它,我會編輯 – nachokk

1

的setBounds方法適用於僅與空佈局和默認的JFrame的佈局是BorderLayout。使用BorderLayout調用JFrame的add方法,並且不指定位置默認值爲BorderLayout.CENTER,並使用其最大尺寸屬性作爲邊界將元件居中。這意味着設置組件的首選大小將不適用於BorderLayout.CENTER。您可以使用setLayout(null)將框架的佈局更改爲null,這被認爲是不好的做法,因爲它會限制代碼的可移植性,或者使用其他佈局管理器。

相關問題