gpt4 book ai didi

两个组件的java swing布局

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:53 24 4
gpt4 key购买 nike

    +--------------------------------------------+
| +-------+ +----------+|
| | +---+ | | +-----+ ||
| | | A | | | | B | ||
| | +---+ | | +-----+ ||
| +-------+ +----------+|
+--------------------------------------------+
^
|
|
Center

背景:我有

  • 一个 JButton(“A”),大小为 50x25,位于 JPanel (FlowLayout.CENTER) 中
  • JLabel(“B”),大小为 100x25,位于 JPanel (FlowLayout.RIGHT) 中
  • 这两个 JPanel 在一个 JPanel 中

期望的结果:我想要

  • 始终水平居中的 JButton“A”,
  • JLabel“B”始终正确对齐。

我尝试过的事情:这些对我不起作用

  • BorderLayout 对我不起作用,因为 JButton“A”向左移动:
  • 我不希望将一个不可见的组件放在 WEST 以撤消偏移

    +--------------------------------------------+
    | +-------+ +----------+|
    | | +---+ | | +-----+ ||
    | | | A | | | | B | ||
    | | +---+ | | +-----+ ||
    | +-------+ +----------+|
    +--------------------------------------------+
    ^ ^
    | |
    | |
    | Center
    |
    Shifted Left
  • GridLayout 无法工作,因为我不想展开“A”和“B”

感谢任何建议!

附:

JButton/JLabel 都在各自的 JPanel 中,因为没有 Jpanel,BorderLayout.CENTER 会在主面板的整个宽度上扩展 JButton(直到 JLabel 的左边缘)。 JPanels 对问题的陈述不是必需的/不重要的

结论:

  • 我选择了下面发布的“装满鳗鱼的气垫船”答案。谢谢!

最佳答案

您应该嵌套 JPanel 并使用布局组合。将包含 JButton 的面板放入另一个使用 GridLayout(1, 0)(1 行,列数可变)的 JPanel 中可以工作,并将该 JPanel 放入使用 BorderLayout 的 JPanel 的 BorderLayout.NORTH 位置中可以工作。

例如

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

public class Foo003 {

private static void createAndShowGui() {
JButton btnA = new JButton("A");
JButton btnB = new JButton("B");

btnA.setPreferredSize(new Dimension(50, 25));
btnB.setPreferredSize(new Dimension(100, 25));

JPanel btnAPanel = new JPanel(); // uses default FlowLayout.CENTER
JPanel btnBPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
btnAPanel.add(btnA);
btnBPanel.add(btnB);

JPanel topPanel = new JPanel(new GridLayout(1, 0));
topPanel.add(new JLabel("")); // empty placeholder label
topPanel.add(btnAPanel);
topPanel.add(btnBPanel);

JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(topPanel, BorderLayout.NORTH);

mainPanel.setPreferredSize(new Dimension(400, 300));

JFrame frame = new JFrame("Foo003");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

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

关于两个组件的java swing布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851826/

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