如何使用GridBagLayout将组件放在右下角?

发布于 2024-12-11 18:53:19 字数 588 浏览 0 评论 0原文

我需要在 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)

但由于某种原因,文本区域位于中心:

在此处输入图像描述

What am我这里做错了吗?

I need to display a single component within a JPanel, and I want to keep that component in bottom right corner at all times. I tried to do it with 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)

But the text area is at the center for some reason:

enter image description here

What am I doing wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

暖风昔人 2024-12-18 18:53:19

例如:

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

在此处输入图像描述

For example:

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

葬シ愛 2024-12-18 18:53:19
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

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

...if you realy want to use GridBagLayout

忆依然 2024-12-18 18:53:19

您必须在 gridx = 0gridy = 0 上放置一个虚拟组件(使用 Box.createGlue() 制作虚拟组件)组件您要放置在右下角 gridx = 1gridy = 1 的组件。像这样

you have to put a dummy (use Box.createGlue() to make a dummy component) component on gridx = 0 and gridy = 0 and the component you want to put at the bottom right at gridx = 1, gridy = 1.like this

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文