Java Swing';s GridBagLayout不会将组件定位在网格单元的顶部

Java Swing';s GridBagLayout不会将组件定位在网格单元的顶部,java,swing,layout,user-interface,gridbaglayout,Java,Swing,Layout,User Interface,Gridbaglayout,我已经试着在代码中尽可能地把这一点归结起来。我已经使用GridBagLayout很长时间了,出于某种原因,我从未遇到过这种情况 JDialog dialog = new JDialog(); dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); dialog.setResizeable(true); JPanel guiHolder = new JPanel(); guiHolder.setLayout(new G

我已经试着在代码中尽可能地把这一点归结起来。我已经使用GridBagLayout很长时间了,出于某种原因,我从未遇到过这种情况

JDialog dialog = new JDialog();
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.setResizeable(true);

JPanel guiHolder = new JPanel();
guiHolder.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.PAGE_START;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
guiHolder.add(new JLabel("my test"), gbc);

dialog.add(guiHolder);
dialog.setSize(new Dimension(320, 240);
dialog.setSize(true);

JLabel在屏幕中央呈正方形结束。我怎样才能让它升到最高点?我已经看过了。我被难住了…

如果您修复了编译错误并将代码包装到可运行的演示中,您将看到GridBagLayout的工作原理与宣传的一样:

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

public class Test implements Runnable
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Test());
  }

  public void run()
  {
    JDialog dialog = new JDialog();
    dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    dialog.setResizable(true);  // fixed mispelling here

    JPanel guiHolder = new JPanel();
    guiHolder.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.PAGE_START;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    guiHolder.add(new JLabel("my test"), gbc);

    dialog.add(guiHolder);
    dialog.setSize(new Dimension(320, 240));
    dialog.setVisible(true);  // fixed wrong method name here
  }
}

如果您修复了编译错误并将代码包装到可运行的演示中,您将看到GridBagLayout的工作原理与广告中的一样:

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

public class Test implements Runnable
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Test());
  }

  public void run()
  {
    JDialog dialog = new JDialog();
    dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    dialog.setResizable(true);  // fixed mispelling here

    JPanel guiHolder = new JPanel();
    guiHolder.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.PAGE_START;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    guiHolder.add(new JLabel("my test"), gbc);

    dialog.add(guiHolder);
    dialog.setSize(new Dimension(320, 240));
    dialog.setVisible(true);  // fixed wrong method name here
  }
}


我来看看对话框的布局管理器。发布的代码甚至没有编译。如果您需要帮助,请发布一个适当的
SSCCE
。不幸的是,我不得不在代码中插入大量的内容。我修复了一个缺陷。希望它现在能编译。
希望它现在能编译。
希望它还不够好。你自己试试看。主要方法在哪里?我们不是来调试您的代码并使其编译的。如果你想要halp,让我们能很容易地帮助你。对我有用。在我修复了编译错误并将代码放在可运行的演示中后,标签显示在对话框顶部的中心位置(与PAGE_START一样)。我将查看对话框的布局管理器。发布的代码甚至不会编译。如果您需要帮助,请发布一个适当的
SSCCE
。不幸的是,我不得不在代码中插入大量的内容。我修复了一个缺陷。希望它现在能编译。
希望它现在能编译。
希望它还不够好。你自己试试看。主要方法在哪里?我们不是来调试您的代码并使其编译的。如果你想要halp,让我们能很容易地帮助你。对我有用。在我修复了编译错误并将代码放在可运行的演示中后,标签将显示在对话框顶部的中心位置(与PAGE_START一样)。-1,OP负责发布正确的SSCCE。我们不应该为他们做这些工作。@camickr通常我会同意,但在这种情况下,OP在评论中提出了一个虚假的解决方案,因此我将此贴给未来可能遇到GBL问题的访问者,他们可能会发现此贴正在寻找答案。哇,家里有这么多仇恨者。我的开发箱没有互联网连接,所以我输入了我的SSCCE。帮忙做手术没什么错。下次我会更认真的。将我的解决方案称为伪造是反应过度。空气中的势利让我窒息。@user1202394无论如何,我一点也不势利。你的解决方案不合适。如果以后必须添加更多内容,您将看到这一点。也许“不正确”或“误导”更合适。-1,OP有责任发布适当的SSCCE。我们不应该为他们做这些工作。@camickr通常我会同意,但在这种情况下,OP在评论中提出了一个虚假的解决方案,因此我将此贴给未来可能遇到GBL问题的访问者,他们可能会发现此贴正在寻找答案。哇,家里有这么多仇恨者。我的开发箱没有互联网连接,所以我输入了我的SSCCE。帮忙做手术没什么错。下次我会更认真的。将我的解决方案称为伪造是反应过度。空气中的势利让我窒息。@user1202394无论如何,我一点也不势利。你的解决方案不合适。如果以后必须添加更多内容,您将看到这一点。也许“不正确”或“误导”更合适。