2012-03-21 15 views
1

次のコードでは、JTextAreaをメインパネルに追加すると表示されません。私はcontrolPanelを追加すると、それは中央ではなくエッジで表示されます。私はGridBagLayoutで新しく、私は単純なものがないと思っています。GridBagLayoutがJTextAreaを表示せず、パネルを中央に表示

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSpinner; 
import javax.swing.JTextArea; 

public class Main { 

    public static void main(String[] args) { 
     new Main(); 
    } 

    public Main() { 
     JFrame frame = new JFrame(); 

     JPanel mainPanel = new JPanel(); 
     JPanel controlPanel = new JPanel(); 

     mainPanel.setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 

     controlPanel.add(new JButton("Play")); 
     controlPanel.add(new JButton("Pause")); 
     controlPanel.add(new JSpinner()); 
     JTextArea textArea = new JTextArea(); 

     c.gridx = 0; 
     c.gridy = 0; 
     c.gridheight = 3; 
     c.gridwidth = 3; 
     mainPanel.add(textArea, c); 
     // mainPanel.add(controlPanel, c); 
     frame.add(mainPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(700, 700); 
     frame.setLocation(250, 100); 
     frame.setVisible(true); 
    } 
} 

EDIT:これは制約があなたの提案をした後にどのように見えるかです。 textAreaはまだ表示されません。

 c.gridx = 0; 
     c.gridy = 0; 
//  c.gridheight = 3; 
//  c.gridwidth = 3; 
     c.weightx = 1.0; 
     c.weighty = 1.0; 
     c.anchor = GridBagConstraints.NORTHWEST; 
     mainPanel.add(textArea, c); 
     // mainPanel.add(controlPanel, c); 
     frame.add(mainPanel); 
+0

なぜそれがエッジに現れると思われますか? –

+0

@ TomHawtin-tacklineそれはgridx = 0とgridy = 0の意味ですか? – gsingh2011

+1

いいえ、それらはちょうど任意のグリッド番号です。 GBの場合、右側にスペーサコンポーネントを追加します。 –

答えて

2

忘れてはいけない重みアンカー:

c.weightx = 1.0; 
    c.weighty = 1.0; 
    c.anchor = GridBagConstraints.NORTHWEST; 

編集:
JTextAreaにに行と列の値を追加する 例:

controlPanel.add(new JButton("Play")); 
    controlPanel.add(new JButton("Pause")); 
    controlPanel.add(new JSpinner()); 

    JTextArea textArea = new JTextArea(20, 40); 

    c.gridx = 0; 
    c.gridy = 0; 
    c.gridheight = 3; 
    c.gridwidth = 3; 
    c.weightx = 1.0; 
    c.weighty = 1.0; 
    c.anchor = GridBagConstraints.NORTHWEST; 
    mainPanel.add(new JScrollPane(textArea), c); 
+0

controlPanelを適切な場所に配置しましたが、textAreaは表示されません。どんな考え? – gsingh2011

+0

@gsingh:おそらく非常に小さいサイズです。行と列を受け取り、妥当な数、たとえば20行と40列を渡すText領域コンストラクタの使用を検討し、JTextAreaをJScrollPaneに配置する必要があります。 –

+0

@ gsingh2011:例えば、私が言っていることの編集を参照してください。 –

1

マイ全く重大な答えは、GridBagLayoutを使用しないことです。 GUIフォーム・ビルダーのためにGridBagLayoutのままにしておきます。

手でGUIを構築したい場合は、手作業でビルドし、フォームビルダーを避けることをお勧めします.BTWの場合、BoxLayoutsを使用してネストされたパネルで一般的にBorderLayoutが最適です。

関連する問題