2012-05-11 58 views
4

可有人請向我解釋,爲什麼每次我用的FlowLayout佈局管理 我的文本框將顯示爲狹縫顯示爲切口。JTextField中使用的FlowLayout時......請解釋

我已經碰到這個問題一段時間了,現在我似乎無法找出爲什麼它出錯了 。

我感覺這是一件簡單的事情,我一次又一次地忽略了,所以如果有人請向我解釋這個現象,我會永遠感激不盡。

import java.awt.Container; 
import java.awt.FlowLayout; 

import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class Console 
{ 
    public Console() 
    { 
     makeConsole(); 
    } 

    private void makeConsole() 
    { 
     JFrame console = new JFrame("ArchiveConsole"); 
     Container base = console.getContentPane(); 
     base.setSize(400, 250); 
     console.setSize(base.getSize()); 
     base.setLayout(new FlowLayout(FlowLayout.CENTER, 5,5)); 

     JTextField tf = new JTextField(); 
     tf.setSize(base.getWidth(), 25); 
     base.add(tf); 

     console.setVisible(true); 
    } 
} 

回答

6

從擺動佈局管理器教程

的的FlowLayout類放部件成一排,在其優選的大小尺寸。如果容器中的水平空間太小而無法將所有組件放在一行中,則FlowLayout類將使用多行。如果容器是比需要的更寬的用於組件的行,該行,默認情況下,水平方向的容器

所以你需要調整文本框的優選尺寸,優選地通過使用setColumns方法內居中。

請注意,如果你希望你的文本字段以跨越整個寬度你可能想使用另一種佈局則FlowLayout以上

例如引述的原因,下面的代碼提供了一個很好看的JTextField,但我具有硬編碼的列數

import javax.swing.JFrame; 
import javax.swing.JTextField; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 

public class TextFieldWithFlowLayout { 
    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
     JFrame console = new JFrame("ArchiveConsole"); 
     Container base = console.getContentPane(); 
     base.setLayout(new FlowLayout(FlowLayout.CENTER, 5,5)); 

     JTextField tf = new JTextField(); 
     tf.setColumns(20); 
     base.add(tf); 
     console.pack(); 
     console.setVisible(true); 
     } 
    }); 
    } 
} 
1

使用: 的JTextField TF =新的JTextField(25);

代替: 的JTextField TF =新的JTextField(); tf.setSize(base.getWidth(),25);

1

當您使用佈局管理,不要嘗試手動設置大小和位置。您與LayoutManager的功能相沖突。 Layoutmanagers根據約束和首選/最小/最大大小確定大小和位置組件。大多數Swing組件會自動處理它,因此通常不應強制使用它們的首選大小。

至於你的JTextField,因爲它不包含任何文本,它的首選大小是幾乎爲零。使用setColumns表示優選大小或調用setPreferredSize

+0

感謝您的指點,我解決了這個問題,我更接近真正理解佈局管理器。 – TrashCan

0

謝謝!

,使用JTextField中函數的參數是非常重要的!

JPanel panel_buttons = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
panel_buttons.add(...); 
... 
panel_buttons.add(...); 
JTextField txt_search = new JTextField(20); 
panel_buttons.add(txt_search); 

如果改變20到30或大,可能爲u找不到it.May是txt_search是下一行。