为什么JButton btn [3] [5]没有放在setBounds()调用中给定的位置上?

时间:2019-07-15 17:57:03

标签: java jframe jbutton

我正在编码一个程序,该程序应包含多个彼此相邻设置的JButton。起初,我想要4 x 6网格。我有3个类:包含main方法的Main类和Gui类构造函数的构造函数调用。 Gui类应包括所有JObjects(JButtons)+ JFrame设置。然后是第三个ButtonPlacement类,其中包含setBounds方法调用。当我在Eclipse中运行代码时,我的按钮数组中的每个按钮都放置在除最后一个位置之外的正确位置:btn [3] [5]。它和整个JFrame一样大。

Main类:

package pack1;

public class Main {

    public static void main(String[] args) {

        new Gui();
    }
}

Gui类:

package pack1;

import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;

import pack1.ActionHandler;
import pack1.ButtonPlacement;

public class Gui {

    static JFrame jf;
    static JButton btn[][] = new JButton[4][6];
    JButton btnReset;

    public Gui() {

        jf = new JFrame();
        jf.setSize(500, 600);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setResizable(false);
        jf.setLocationRelativeTo(null);



        for(int i = 0; i<4;++i) {
            for(int j = 0; j<6; ++j) {
            btn[i][j] = new JButton("btn" + i + j);
            btn[i][j].setVisible(true);
            btn[i][j].addActionListener(new ActionHandler());
            btn[i][j].setFocusPainted(false);
            btn[i][j].setContentAreaFilled(true);
            btn[i][j].setBorder(null);
            btn[i][j].setFont(new Font("Century Gothic", Font.PLAIN, 20));
            jf.add(btn[i][j]);
            }

        }

        ButtonPlacement.place();

        jf.setVisible(true);

    }

}

ButtonPlacement类:

package pack1;

import pack1.Gui;

public class ButtonPlacement {

    public static void place() {


        Gui.btn[0][0].setBounds(0, 140, 100, 60);
        Gui.btn[1][0].setBounds(100, 140, 100, 60);
        Gui.btn[2][0].setBounds(200, 140, 100, 60);
        Gui.btn[3][0].setBounds(300, 140, 100, 60);

        Gui.btn[0][1].setBounds(0, 200, 100, 60);
        Gui.btn[1][1].setBounds(100, 200, 100, 60);
        Gui.btn[2][1].setBounds(200, 200, 100, 60);
        Gui.btn[3][1].setBounds(300, 200, 100, 60);

        Gui.btn[0][2].setBounds(0, 260, 100, 60);
        Gui.btn[1][2].setBounds(100, 260, 100, 60);
        Gui.btn[2][2].setBounds(200, 260, 100, 60);
        Gui.btn[3][2].setBounds(300, 260, 100, 60);

        Gui.btn[0][3].setBounds(0, 320, 100, 60);
        Gui.btn[1][3].setBounds(100, 320, 100, 60);
        Gui.btn[2][3].setBounds(200, 320, 100, 60);
        Gui.btn[3][3].setBounds(300, 320, 100, 60);

        Gui.btn[0][4].setBounds(0, 380, 100, 60);
        Gui.btn[1][4].setBounds(100, 380, 100, 60);
        Gui.btn[2][4].setBounds(200, 380, 100, 60);
        Gui.btn[3][4].setBounds(300, 380, 100, 60);

        Gui.btn[0][5].setBounds(0, 440, 100, 60);
        Gui.btn[1][5].setBounds(100, 440, 100, 60);
        Gui.btn[2][5].setBounds(200, 440, 100, 60);
        Gui.btn[3][5].setBounds(300, 440, 100, 60);

    }

}

我希望Button btn [3] [5]在其位置300、440处,其大小分别为100、60,但是该按钮与JFrame一样大。

1 个答案:

答案 0 :(得分:-1)

将此内容添加到Gui类中后,它对我来说便可以正常工作:

jf.setLayout(null);