我必须将程序上的一个按钮对齐到正确的中间位置,我运行的当前代码却显示了与程序一样大的按钮,我想要一个特定大小的中心按钮,这是我试过的
/**
* Created by Timk9 on 11/04/2016.
*/
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame {
{
JFrame window = new JFrame("Test");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(true);
window.setSize(600, 600);
window.setVisible(true);
window.setLocationRelativeTo(null);
JPanel p = new JPanel(new GridBagLayout());
//Button does not appear until I resize the program?
JButton b1 = new JButton("Click here");
GridBagConstraints c = new GridBagConstraints();
p.add(b1);
window.add(p);
}
public static void main(String[] args) {
new Test();
}
}
答案 0 :(得分:3)
JPanel p = new JPanel(new GridBagLayout());
使用GridBagLayout创建一个面板,这是一个很好的布局管理器,用于使组件居中。
p.add(b1);
然后你将按钮添加到面板而不使用任何约束。
代码应为:
p.add(b1, c);
//在我调整程序大小之前,按钮才会出现?
在框架可见之前,应将所有组件添加到框架中。 setVisible(...)
语句应该是构造函数的最后一个语句。
你也可以指出哪个部分是实例初始化块,我以为我正在使用构造函数
请参阅How to Make Frames上Swing教程中的FrameDemo
示例,了解更好的方法来构建代码,以便遵循Swing约定。从工作代码开始并进行更改以添加包含按钮的面板,而不是使用JLabel。请注意,您不再需要使用getContentPane()方法,只需将面板直接添加到框架中即可。
答案 1 :(得分:1)
LayoutManager
定义了组件的布局位置和大小。您正在使用的GridLayout
e。 G。在相等的网格字段中划分可用空间并使组件完全填充此空间,这就是您的按钮与应用程序一样大的原因。有关LayoutManagers的更多信息,请参阅此处:https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
顺便说一下。您的代码无法编译:{{1}}