【发布时间】:2021-10-05 12:03:23
【问题描述】:
我正在尝试使用默认 FlowLayout 在 JPanel 中将 JButton 居中。这是我的代码:
import javax.swing.*;
import java.awt.*;
public class CoinFlip {
public static void main(String[] args) {
JFrame frame = new JFrame("Coin Flip");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton coinFlipButton = new JButton("Flip Coin");
coinFlipButton.setSize(100, 100);
JPanel coinFlipPanel = new JPanel();
coinFlipPanel.setSize(500, 100);
coinFlipPanel.setBackground(Color.GRAY);
coinFlipPanel.add(coinFlipButton);
JTextArea coinFlipResults = new JTextArea();
coinFlipResults.setSize(500, 200);
frame.getContentPane().add(coinFlipPanel);
frame.getContentPane().add(coinFlipResults);
frame.setVisible(true);
}
}
如何在 JPanel (coinFlipPanel) 中将 JButton (coinFlipButton) 居中?我试过使用 FlowLayout.CENTER 但这会使按钮的大小增加,从而占用所有空间。
【问题讨论】:
-
这段代码似乎没有意义。如果您像这样向 JFrame 添加两个组件,那么您将它们都添加到同一个区域并且 JFrame 应该只显示一个(因为它的布局 BorderLayout 就是这样工作的)。并且尝试将 FlowLayout 居中对我个人来说没有意义。试着告诉我们你想做什么,我们会尽力想出一些可行的方法。
-
您的问题不完整。您有两个组件,并且没有为每个组件指定要求。您希望组件在同一行上还是垂直显示或其他排列?另外,不要使用 setSize(...)。它什么也不做。布局管理器会根据布局管理器的规则确定每个组件的大小。
-
参见this answer 了解使组件居中的四种方法。我通常不希望组件拉伸到容器(面板)的大小,因此请避免左侧的两个。我更喜欢
GridBagLayout(右上角)而不是BoxLayout.. 一般提示: 1) 请参阅Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的。)该建议也适用于setSize()。有多种方法可以使按钮变大。 .. -
.. 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以展示如何应该使用额外的空间。
标签: java swing awt layout-manager flowlayout