gpt4 book ai didi

Java Swing 为什么有时只能对齐?

转载 作者:行者123 更新时间:2023-11-29 04:35:34 26 4
gpt4 key购买 nike

在 Java Swing 中有几种不同的命令可以显式对齐元素。看起来这些命令只在一些非常具体的约束下工作,并且这些约束没有在任何地方记录。大多数时候我想对齐元素,这些命令根本不做任何事情。所以我想知道为什么这些命令不执行文档中所说的它们所做的,以及如何在 Swing 中对齐元素?

作为引用,这里有一个带有 OK 按钮的 SSCCE,当我们明确地将水平对齐方式设置为居中时,它会向左对齐。

import javax.swing.*;
import java.awt.*;

public class E {

public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel notificationView = new JPanel();
notificationView.setPreferredSize(new Dimension(300, 145));
notificationView.setLayout(new GridBagLayout());
JPanel content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));

JLabel notificationText = new JLabel("Here is some text to display to the user and below this is an ok button.");
content.add(notificationText);
JButton buttonOkNotification = new JButton("OK");
//buttonOkNotification.setHorizontalAlignment(JLabel.CENTER); // does not do anything
//buttonOkNotification.setAlignmentX(Component.CENTER_ALIGNMENT); // does not do anything
content.add(buttonOkNotification);

notificationView.add(content);
frame.add(notificationView);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}

最佳答案

JButton buttonOkNotification = new JButton("OK");
//buttonOkNotification.setHorizontalAlignment(JLabel.CENTER); // does not do anything
//buttonOkNotification.setAlignmentX(Component.CENTER_ALIGNMENT); // does not do anything

请注意,在按钮上调用的方法是对齐按钮的内容,而不是按钮本身。这些约束通常只有在组件拉伸(stretch)大于其首选尺寸时才会变得相关或引人注目。这种拉伸(stretch)通常是它所在容器的布局和约束的结果。BorderLayout 就是一个很好的例子:

  • 要水平而非垂直拉伸(stretch)组件,请将其添加到 PAGE_STARTPAGE_END
  • 要垂直而非水平拉伸(stretch)组件,请将其添加到 LINE_STARTLINE_END
  • 要在垂直水平方向拉伸(stretch)组件,请将其添加到CENTER

将其与 FlowLayout 进行对比。流式布局不会垂直或水平拉伸(stretch)组件,而是始终将它们保持在首选大小。


要在面板对齐按钮组件,需要对布局使用约束。这可以在施工中完成,例如:

new FlowLayout(FlowLayout.RIGHT); // aligns all child components to the right hand side

但在将组件添加到容器时更常见。例如。在将组件添加到 GridBagLayout 时,它可能看起来像这样:

gridBagConstraints.anchor = GridBagConstraints.NORTHWEST;
panel.add(new JLabel("North West"), gridBagConstraints);

关于Java Swing 为什么有时只能对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41742289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com