首页 > 解决方案 > 如何在 JFrame 中正确实现 JButton?它只是占据了整个屏幕

问题描述

我是 GUI 制作的新手,我真的不知道如何正确实现 JButton。所以我已经把它放进去了,但我似乎无法让它不占据整个窗口。我只想要窗口底部的一个小按钮。

我试过 setbounds 和 setsize 但似乎都没有工作。

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

public class Menu extends JFrame implements ActionListener{

    private Container win;
    private Color color;
    private ImageIcon exportButton = new ImageIcon("export.png");

    public Menu(){
        super("MLA Formatter");
        JButton b1;
        win = getContentPane();
        win.setBackground(Color.white);
        b1 = new JButton("Export File");
        b1.setVerticalTextPosition(AbstractButton.CENTER);
        b1.setHorizontalTextPosition(AbstractButton.CENTER);
//        b1.setBounds(500,900,100,100);
        b1.setSize(100,100);
        add(b1);

    }

    public static void main(String[] args){
        Menu window = new Menu();
        window.setBounds(200, 200, 1000, 1000);
        window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        window.setVisible(true);
    }


    @Override
    public void actionPerformed(ActionEvent e) {

    }
}

标签: javaswingjframeawtlayout-manager

解决方案


我将尝试通过下面的示例演示您拥有的选项(在这里,我采用了您的代码并将其最小化以证明我的观点。)。

在这里,我提到了 4 个选项。您可以取消注释每个选项下的代码(一次一个)并运行它并查看自己。

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

public class Menu extends JFrame {

  public Menu() {
    super("MLA Formatter");
    JButton b1 = new JButton("Export File");
    b1.setVerticalTextPosition(AbstractButton.CENTER);
    b1.setHorizontalTextPosition(AbstractButton.CENTER);

//Layout 1
//Default layout of JFrame content pane is BorderLayout.
//When we do not specify a constraint (like BorderLayout.SOUTH), default is BorderLayout.CENTER
//So, this is equivalent to add(b1, BorderLayout.CENTER);
    //add(b1);

//Layout 2
    //add(b1, BorderLayout.SOUTH);

//Layout 3
    //setLayout(new FlowLayout());
    //add(b1);

//Layout 4
    setLayout(new GridBagLayout());
    add(b1, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.SOUTH,
        GridBagConstraints.NONE, new Insets(10, 10, 10, 10), 0, 0));
  }

  public static void main(String[] args) {
    Menu window = new Menu();
    window.setBounds(200, 200, 1000, 800);
    window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    window.setVisible(true);
  }
}

推荐阅读