Java 为什么JButton btn[3][5]没有被放置在setBounds()调用中给定的位置上?
我正在编写一个程序,它应该包含多个并排设置的JButton。起初我想要一个4乘6的网格。我有3个类:一个包含Main方法的主clas和一个Gui类构造函数的构造函数调用。Gui类应该包括所有JObjects JButtons和JFrame设置。然后还有第三个ButtonPlacement类,它包含setBounds方法调用。当我在Eclipse中运行代码时,我的按钮数组中的ervery按钮被放置在正确的位置,除了最后一个:btn[3][5]。它和整个JFrame一样大 班长:Java 为什么JButton btn[3][5]没有被放置在setBounds()调用中给定的位置上?,java,swing,jframe,jbutton,Java,Swing,Jframe,Jbutton,我正在编写一个程序,它应该包含多个并排设置的JButton。起初我想要一个4乘6的网格。我有3个类:一个包含Main方法的主clas和一个Gui类构造函数的构造函数调用。Gui类应该包括所有JObjects JButtons和JFrame设置。然后还有第三个ButtonPlacement类,它包含setBounds方法调用。当我在Eclipse中运行代码时,我的按钮数组中的ervery按钮被放置在正确的位置,除了最后一个:btn[3][5]。它和整个JFrame一样大 班长: package p
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);
}
}
我希望按钮btn[3][5]位于其位置300、440处,大小为100、60,但该按钮与JFrame一样大。将其添加到类Gui中可以让它正常工作:
jf.setLayout(null);
不要使用挫折。使用布局管理器RSA GridLayout可能工作得很好我想在没有任何布局管理器的情况下这样做,我想知道,为什么最后的挫折调用btn[3][5]无法工作;在类Gui中,它工作得很好,但不知道为什么没有它,其他JButton的布局也能工作。这正是你不应该做的。这保证了gui在除了一个平台之外的所有平台上都会看起来很糟糕,并且很难维护和增强正常工作以“正常工作”Swing/AWT gui需要使用布局。Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。
jf.setLayout(null);