元素未显示在GridBagLayout中

时间:2016-02-03 20:27:39

标签: java swing layout-manager gridbaglayout

我使用GridBagLayout作为JFrame布局。无论我写什么,我的元素都没有显示出来。除了GridBagLayout之外,请不要给出任何使用的答案(对不起,如果它听起来很粗鲁)

enter image description here

JPanel Panel;
    JButton insertButton = new JButton("Insert");
    GridBagConstraints gbc;

    public MainFrame() {

        this.setTitle("JAVA & MySQL");
        this.setVisible(true);
        this.setBounds(500, 100, 600, 600);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        Panel = new JPanel(new GridBagLayout());
        Panel.setOpaque(true);
        Panel.setBackground(Color.BLUE);
        gbc = new GridBagConstraints();

        gbc.weightx = 1;
        gbc.weighty = 1;
        gbc.anchor = GridBagConstraints.CENTER;
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.insets = new Insets(0, 10, 0, 0);
        gbc.fill = GridBagConstraints.BOTH;

        Panel.add(insertButton, gbc);




    }

2 个答案:

答案 0 :(得分:2)

你的代码不明确是什么(这是你的框架类中的代码)并且你选择的名字很差。按照惯例,字段名称应以小写字母开头(以区别于类名)。

看来你永远不会将你的面板添加到框架中,也不会打包()框架。

改变这样的代码:

public MainFrame() {
    this.setTitle("JAVA & MySQL");
    // setting visible should come last!
    //this.setVisible(true);
    this.setBounds(500, 100, 600, 600);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    Panel = new JPanel(new GridBagLayout());
    Panel.setOpaque(true);
    Panel.setBackground(Color.BLUE);
    gbc = new GridBagConstraints();

    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.insets = new Insets(0, 10, 0, 0);
    gbc.fill = GridBagConstraints.BOTH;

    Panel.add(insertButton, gbc);

    // put the panel into the frame!
    setLayout(new BorderLayout());
    add(Panel, BorderLayout.CENTER);
    pack();
    setVisible(true);
}

答案 1 :(得分:2)

问题是您没有将面板添加到顶级容器的内容窗格中。致电pack()以实现目标。

此外,正如@MaddProgrammer在评论中所说,您应该在添加所有组件后调用setVisible()revalidate()方法,否则您必须致电repaint()setBounds()为了验证组件层次结构。

根据Container#add(Component comp)文档:

  

此方法更改与布局相关的信息,因此,   使组件层次结构无效。 如果容器已经存在   显示后,必须在此后验证层次结构   显示添加的组件。

此外,您不应该混合绝对布局调用,例如setLocation()setSize()input.cmn-toggle-round-flat + label:after { content: "C"; line-height: 36px; text-align: center; top: 2px; left: 2px; bottom: 2px; width: 36px; color: #fff; border-radius: 36px; transition: margin 0.2s, background 0.2s; } (只是避免它们)和布局管理器(强烈建议这些调用)< / p>