簡體   English   中英

如何使用 GridBagLayout 將組件放在右下角?

[英]How to put component in bottom-right corner with GridBagLayout?

我需要在JPanel顯示單個組件,並且我想始終將該組件保留在右下角。 我嘗試使用 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)

但由於某種原因,文本區域位於中心:

在此處輸入圖片說明

我在這里做錯了什么?

例如:

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();
         }
      });
   }
}

在此處輸入圖片說明

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

您必須在gridx = 0gridy = 0上放置一個虛擬(使用Box.createGlue()制作一個虛擬組件)組件, gridx = 0要放置在gridx = 1 , gridy = 1 像這樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM