为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 JFrame 中正确实现 JButton?它只是占据了整个屏幕

如何在 JFrame 中正确实现 JButton?它只是占据了整个屏幕

绝地无双 2022-05-12 18:50:45
我是 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) {    }}
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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


在这里,我提到了 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);

  }

}


查看完整回答
反对 回复 2022-05-12
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你要么需要


正确使用您的布局管理器。(默认情况下为 JFrame,它的 BorderLayout)

或者将布局设置为空。

在您的构造函数中添加以下内容:


setLayout(null);

您的构造函数应如下所示:


    public Menu(){

        super("MLA Formatter");

        JButton b1;

        setLayout(null); // add this line

        win = getContentPane();

        win.setBackground(Color.white);

        b1 = new JButton("Export File");

        b1.setBounds(500,400,100,100);  //changed this co-ordinates(900 will overflow)

        b1.setSize(100,100);

        add(b1);


    }

不过,我建议您学习使用布局管理器。


查看完整回答
反对 回复 2022-05-12
  • 2 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信