2012-01-08 28 views
1

我有這個應用,但是,當我調整窗口大小時,內部的元素JTextArea,它不會調整窗口大小。爲什麼?該應用不會調整其組件

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class ExampleGUI { 

private JTextArea text_area; 
private JScrollPane scroll_bar; 

private JFrame frame; 
private JPanel panel; 

public ExampleGUI(){ 

    frame = new JFrame("Example GUI"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    text_area = new JTextArea(); 
    scroll_bar = new JScrollPane(text_area); 

    panel = new JPanel(); 
    panel.add(scroll_bar); 

    frame.add(panel); 

    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 

    SwingUtilities.invokeLater(new Runnable(){public void run(){new ExampleGUI();}}); 
} 
} 
+0

爲什麼不簡單評論此行frame.setLayout(new FlowLayout());此致 – 2012-01-08 16:22:21

+0

爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-01-08 16:44:28

+0

我發佈了一個SSCCE – Mazzy 2012-01-08 17:09:43

回答

3

您需要將GridBagConstraint x和y的權重(的weightx和沉重 - 第5和第6的參數在GridBagConstraint構造函數)設置爲0.0的正值。你應該閱讀關於GridBagLayout的教程,如果你打算使用它,因爲它非常複雜。一些嵌套更簡單的佈局或使用第三方佈局如MigLayout取得了巨大成功。

+0

對嵌套簡單佈局的建議+1。只需'BorderLayout','FlowLayout','BoxLayout'和'Box'組件,您就可以做很多事情,而不需要頭疼GridBagLayout。 – Paul 2012-01-08 18:03:16

3

您的框架佈局是FlowLayout。這不會調整兒童的大小。從the docs

流佈局讓每個組件都採用其自然(首選)大小。

使用BorderLayout並將窗格置於CENTER中將會更好。

替換此:

frame.setLayout(new FlowLayout()); 
frame.add(pane); 

與此:

frame.setLayout(new BorderLayout()); 
frame.add(pane, BorderLayout.CENTER); 

而且,氣墊船指出,如果你需要的各個組件當窗格調整大小來調整,那麼你需要有非GridBagConstraints中的零權重。

+0

沒有看到,1+。聽起來像OP需要閱讀整個佈局管理器教程。 – 2012-01-08 16:27:13

+0

但文本區域保持相同的維度。 – Mazzy 2012-01-08 16:28:51

+1

@Mazzy:當然文本區域保持不變 - 您已經設置了封閉JScrollPane的首選大小。 – 2012-01-08 16:53:07

3

這考慮到了氣墊船Full Of Eels的建議&特德霍普與其他一些調整。

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

import java.util.Collection; 

public class AziendaGUI implements ActionListener { 

private JButton view_list; 
private JButton save_list; 
private JTextArea text_area; 
private JScrollPane scrollpane; 
private JPanel pane; 

private JFrame frame; 
private GridBagLayout grid; 

public AziendaGUI() { 

    frame = new JFrame("Immobiliari s.p.a"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    frame.setLayout(new BorderLayout()); 

    view_list = new JButton("View Property"); 
    view_list.setActionCommand("view_list"); 
    view_list.addActionListener(this); 

    save_list = new JButton("Save List"); 
    save_list.setActionCommand("save_list"); 
    save_list.addActionListener(this); 

    text_area = new JTextArea(10,22); 
    text_area.setEditable(false); 
    scrollpane = new JScrollPane(text_area); 

    grid = new GridBagLayout(); 
    pane = new JPanel(); 
    pane.setLayout(grid); 

    /* Set Constraints view_list button */ 
    grid.setConstraints(view_list, new GridBagConstraints(0,0,1,1,0.0,0.0,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)); 
    pane.add(view_list); 

    /* Set Constraints save_list button */ 
    grid.setConstraints(save_list,new GridBagConstraints(1,0,1,1,0.1,0.1,GridBagConstraints.EAST,GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)); 
    pane.add(save_list); 

    frame.add(scrollpane); 

    frame.add(pane, BorderLayout.NORTH); 

    frame.pack(); 
    frame.setVisible(true); 
} 

private void store(){ 

    String file_name = JOptionPane.showInputDialog("Inserisci il nome del file"); 

} 

@Override 
public void actionPerformed(ActionEvent e){ 

    String s = e.getActionCommand(); 

    if(s.equals("view_list")){ 
    } 
    if(s.equals("save_list")){ 

     store(); 
    } 
} 


public static void main(String[] args) { 

    SwingUtilities.invokeLater(new Runnable(){@Override 
               public void run(){new AziendaGUI();}}); 
} 
} 
+0

爲什麼將窗格添加爲NORTH組件?將窗格添加爲CENTER組件會更有意義,因此它可以垂直和水平方向展開。 – 2012-01-08 17:29:03

+0

@TedHopp仔細查看代碼。測試顯示分配給文本區域的額外垂直空間。 – 2012-01-08 17:32:46

相關問題