2016-12-01 51 views
2

我正在添加組件JPanel,它被設置爲FlowLayout,它們不會在下一行移動,即使該行左側沒有空格。 Here is the screenshot of the problem如何將組件移至FlowLayout中的下一行?

import javax.swing.*; 
import java.awt.*; 
import javax.swing.border.BevelBorder; 
import javax.swing.border.TitledBorder; 
public class GUI extends JFrame 
{ 
    private JLabel jlfname; 
    private JPanel p1; 
    private JTextField t1; 
    private JLabel jllname; 
    private JTextField t2; 
    private JLabel jltitle; 
    private JTextField t3; 
    GUI() 
    { 
     jlfname=new JLabel("First Name : "); 
     p1=new JPanel(); 
     TitledBorder titled = new TitledBorder("Name"); 
     p1.setBorder(titled); 
     t1=new JTextField(10); 
     jllname=new JLabel("Last Name : "); 
     t2=new JTextField(10); 
     jltitle=new JLabel("Title : "); 
     t3=new JTextField(10); 
     //Add in Pannel 
     p1.setLayout(new FlowLayout()); 
     p1.add(jlfname); 
     p1.add(t1); 
     p1.add(jllname); 
     p1.add(t2); 
     p1.add(jltitle); 
     p1.add(t3); 
     //Add in Frame 
     add(p1); 
     setSize(550,500); 
     setTitle("JFrame Tutorial"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new FlowLayout(FlowLayout.LEFT)); 
     setResizable(false); 
     setVisible(true); 
    } 
    public static void main(String [] args) 
    { 
     new GUI(); 
    } 
} 

我也試圖設置面板的寬度,但它不工作!

回答

3

FlowLayout旨在基於單行顯示的所有組件計算其首選大小。 FlowLayout也尊重組件的首選大小。

setLayout(new FlowLayout(FlowLayout.LEFT)); 

要覆蓋所述框架的默認佈局管理器,所以現在的幀將尊重面板的優選大小添加到幀,這意味着所有的部件將在一行顯示。

擺脫這種說法。

現在組件將能夠包裝在可用空間中,因爲默認情況下面板將被添加到BorderLayout.CENTER中,該框架佔用了框架中可用的所有空間。

但是,上述解決方案只有在組件添加到BorderLayout的CENTER時纔有效。通常情況下,你不應該使用setSize(),而是使用pack()給所有的框架以首選大小顯示。

對於一個更靈活的佈局,將計算一個適當的首選大小的面板檢查出Wrap Layout。此類擴展FlowLayout以計算首選大小。

相關問題