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

时间:2019-01-20 22:49:45

标签: java swing jframe awt layout-manager

我是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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

您要么需要

  1. 正确使用布局管理器。(默认情况下,JFrame及其BorderLayout用于布局管理器)
  2. 或将Layout设置为null。

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

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);

    }

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