gpt4 book ai didi

java - Java 中的 BorderLayout() 问题

转载 作者:行者123 更新时间:2023-12-01 16:55:23 25 4
gpt4 key购买 nike

我尝试了很多不同的方法,但我将解释其中两种以及发生了什么(没有错误消息或任何内容,只是没有像应该的那样显示或根本没有显示):

首先,我创建了一个名为layout 的JPanel 并将其设置为BorderLayout。以下是我如何制作它的片段:

JPanel layout = new JPanel();
layout.setLayout(new BorderLayout());

colorChoice = new JLabel("Choose your color: ");
layout.add(colorChoice, BorderLayout.NORTH);

colorBox = new JComboBox(fireworkColors);
colorBox.addActionListener(this);
layout.add(colorBox, BorderLayout.NORTH);

在这种情况下,他们根本不会出现。它只是继续我添加的其他内容。

然后我就尝试了 setLayout(new BorderLayout());这是该代码的片段:

    setLayout(new BorderLayout());
colorChoice = new JLabel("Choose your color: ");
add(colorChoice, BorderLayout.NORTH);

colorBox = new JComboBox(fireworkColors);
colorBox.addActionListener(this);
add(colorBox, BorderLayout.NORTH);

在这种情况下,它们被添加,但是,宽度占据了框架的整个宽度,而文本字段(代码片段中未显示)基本上占据了其他所有内容。

这是我尝试过的:setPreferredSize() & setSize()

我还有什么遗漏的吗?谢谢。

我还应该注意,这是一个单独的类,并且该类中没有 main 类。我这么说只是因为我扩展了 JPanel 而不是 JFrame。我见过有人扩展JFrame并使用JFrame,但我还没有尝试过。

最佳答案

  • 您创建了一个 JPanel,但没有将其添加到任何容器中。在将其添加到某些内容(JFrame 或位于层次结构上方某个框架中的另一个面板)之前,它是不可见的
  • 您将两个组件添加到了 BorderLayout 中的同一位置。最后添加的一个将占据该位置。
<小时/>

更新:

您不需要扩展JFrame。我从来不这样做,相反,我总是扩展 JPanel。这使我的自定义组件更加灵活:它们可以添加到另一个面板中,也可以添加到框架中。

因此,为了演示这个问题,我将制作一个完整的小程序:

public class BadGui
{
public static void main(String[] argv)
{
final JFrame frame = new JFrame("Hello World");
final JPanel panel = new JPanel();
panel.add(new JLabel("Hello"), BorderLayout.NORTH);
panel.add(new JLabel("World"), BorderLayout.SOUTH);
frame.setVisible(true);
}
}

在此程序中,我创建了一个面板,但没有将其添加到任何内容中,因此它永远不可见。

在下一个程序中,我将通过将面板添加到框架来修复它。

public class FixedGui
{
public static void main(String[] argv)
{
final JFrame frame = new JFrame("Hello World");
final JPanel panel = new JPanel();
panel.add(new JLabel("Hello"), BorderLayout.NORTH);
panel.add(new JLabel("World"), BorderLayout.SOUTH);
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}

请注意,在这两个面板中,当我向面板添加某些内容时,我选择了不同的布局参数(一个标签放在“北”中,另一个标签放在“南”中)。

关于java - Java 中的 BorderLayout() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33659247/

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