当前位置: 首页 > 知识库问答 >
问题:

当我将GridBagLayout添加到JFrame时,它不起作用

孙弘博
2023-03-14

我的GridbagLayout有些问题。我创建了一个JPanel(在本例中称为mainPanel),它的布局被设置为GridBagLayout。我已经为每个JButton指定了约束,并将约束添加到每个Button。现在,当我运行代码时,按钮总是紧挨着的,而不考虑我在约束中指示的Gridx/Gridy值。此外,按钮总是位于JFrame的中心,我希望一个按钮出现在右上角、左上角和南边。

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

public class test {
public static void main (String[] args) {
    myJFrame test = new myJFrame();
    }
}

class myJFrame extends JFrame {
   public myJFrame () {
      setSize(500,500);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainPanel myPanel = new mainPanel();
      add(myPanel);

     setVisible(true);
 }
}

class mainPanel extends JPanel {
    public mainPanel(){
       setLayout(new GridBagLayout());
       GridBagConstraints c = new GridBagConstraints();

        c.anchor =      GridBagConstraints.NORTHWEST;
        c.gridx =       1000;
        c.gridy=        1;
        add(new JButton("1"),c);

        c.anchor =      GridBagConstraints.NORTHEAST;
        c.gridx =       100;
        c.gridy=        1;
        add(new JButton("2"),c);

        c.anchor =      GridBagConstraints.SOUTH;
        c.gridx =       200;
        c.gridy=        1;
        add(new JButton("3"),c);
   }
}

这是我运行代码时得到的结果

共有1个答案

谷隐水
2023-03-14

现在,当我运行代码时,按钮总是紧挨着的,而不考虑我在约束中指示的Gridx/Gridy值。

正确,不能只指定随机单元格。每个单元格中必须有一个组件。

此外,按钮始终位于JFrame的中心,

你为什么要选择像100,200,1000这样的随机x位置?也许水平的boxlayout会是更好的布局管理器。您可以添加组件,然后在它们之间添加空格:

panel.add( button1 );
panel.add( Box.createHorizonalStrut(100);
panel.add( button2 );
panel.add( Box.createHorizonalStrut(200);

或者使用FlowLayout并指定每个组件之间的“间隙”。

 类似资料:
  • 问题内容: 我发现,当我编写“ pnlMap.add(map [i] [j])”时,键侦听器将无法工作。map是JButton的集合,pnlMap是JPanel。 公共游戏(玩家播放器){ 问题答案: 为了工作,必须将其注册为可聚焦的组件并使其具有键盘焦点。默认情况下,大多数容器都喜欢和无法将其聚焦(在考虑使它们成为容器之前,我会非常小心)。这意味着,一旦您添加了一个可以接受键盘焦点的组件(并且它

  • 我有一些代码生成以下内容: 我希望3、4和5个JTextFields在JLabels旁边,就像1和2一样。我的代码是尝试这样做,但上面的图像是结果。 有人能指出我代码中的问题吗?

  • 我是Spring和Java EE的新手。这是我的一个非常简单的应用程序: web.xml 我使用glassfish 4.1和IDEA。如果没有行 然后它工作得很好,并打开hello.jps页面(没有css和js资源)。Glassfish日志: [2015-03-04T17:18:04.880+0400][glassfish 4.1][警告][][org.springframework.web.se

  • 我正在尝试将此 JPanel 添加到 JFrame 中,但我看不到他。当我创建新的 java 类并自己制作这个框架时,一切都很好。 来自JFrame表单的代码。 来自 JPanel 的代码: 来自Java类的代码。 我想不出区别在哪里。有人能帮我吗?

  • 我在向JFrame添加JLabel时遇到问题。我使用了一些教程中描述的JPanel,但标签不会在框架中弹出;其他swing组件(如JTextField、JButton等)也存在同样的问题。。绘制直线、矩形等确实可行。我希望有人知道,我在这里犯了什么样的错误: 主方法位于另一个类中: 框架按预期弹出,但JLabel丢失。感谢所有有用的评论。

  • 我有一个关于向Java框架添加组件的问题。 我有一个带有两个按钮的JGroup和一个添加了JTable的JScrollPane。我想将这两个都添加到JFrame中。 我可以将JPanel添加到JFrame,或者将JScrollPane添加到JFrame,并且它们可以正确显示。我很难将它们都添加到JFrame并显示它们。 是否有与JFrames相关的东西不允许这样做?任何帮助都将不胜感激。 编辑 问