2011-10-26 18 views
5

JPanelに1つのコンポーネントを表示する必要があり、そのコンポーネントを常に右下隅に表示したいと考えています。 GridBagLayoutを使用してコンポーネントを右下に配置する方法は?

val infoArea = new TextArea { 
    text = "Hello!" 
    border = Swing.EmptyBorder(30) 
    background = Color.RED 
    editable = false 
} 
val p = new JPanel 
p.setLayout(new GridBagLayout) 
val c = new GridBagConstraints 
c.gridx = 0 
c.gridy = 0 
c.anchor = GridBagConstraints.LAST_LINE_END 
p.add(infoArea.peer,c) 
val f = new JFrame 
f.setContentPane(p) 
f.setVisible(true) 

しかし、テキストエリアには、何らかの理由で中心にされています:私はGridBagLayoutがでそれを実行しようとしました

enter image description here

私はここで間違って何をしているのですか?例えば

+0

を使用したい場合は、それはあなたのコードで表示されるのGridBagLayoutチュートリアル(追加を読んでいませんJPanelを埋めるためにいくつかのダミーコンポーネントを追加せず、GridBagConstraintsをすべて設定するのではなく、gridxとgridyを0にします。)、これは何も期待できません最初に勉強することなく働くことができます。それにもかかわらず、BorderLayoutsなどのより単純なレイアウトを使用して入れ子になったJPanelを使用します。 –

+0

@HovercraftFullOfEels - 私は1つのセルしか持たず、右下に配置されるコンポーネント(アンカー制約を設定すること)が必要です。ここには他にどんな制約がありますか? – Rogach

+0

weightx、weighty for oneですが、1つのコンポーネントだけを追加している場合でも、GridBagLayoutで行うことはできません。ここでも、JPanelをそれぞれ独自のレイアウトでネストします。ここでも、BorderLayoutはうまくいくでしょう。 –

答えて

5
final JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
frame.setLayout(new GridBagLayout()); 

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.fill = GridBagConstraints.BOTH; 
gbc.weightx = 1.0; 
gbc.weighty = 1.0; 
frame.add(Box.createGlue(), gbc); 

final JTextArea textArea = new JTextArea("SE"); 
textArea.setPreferredSize(new Dimension(50, 50)); 
textArea.setOpaque(true); 
textArea.setBackground(Color.RED); 
gbc = new GridBagConstraints(); 
gbc.gridx = 1; 
gbc.gridy = 1; 
gbc.fill = GridBagConstraints.NONE; 
gbc.weightx = 0.0; 
gbc.weighty = 0.0; 
frame.add(textArea, gbc); 

frame.setSize(640, 480); 
frame.setVisible(true); 

...あなたは本当にのGridBagLayout

+1

まあ、ダミーコンポーネントとしてBoxの「グルー」を使用しました。よく行われ、1+です。 –

+0

これは私のためにうまくいった。何らかの理由で、2つの境界線レイアウトを使用した場合、メインパネルの右側部分全体がグレーで塗りつぶされていました。 – Rogach

8

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.*; 

public class LayoutDemo { 
    private static void createAndShowGui() { 
     JLabel label = new JLabel("Hello"); 
     label.setOpaque(true); 
     label.setBackground(Color.red); 

     JPanel bottomPanel = new JPanel(new BorderLayout()); 
     bottomPanel.add(label, BorderLayout.LINE_END); 

     JPanel mainPanel = new JPanel(new BorderLayout()); 
     mainPanel.add(bottomPanel, BorderLayout.PAGE_END); 
     mainPanel.setPreferredSize(new Dimension(400, 400)); 


     JFrame frame = new JFrame("LayoutDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

enter image description here

関連する問題