我研究了如何更改要在JFrame上显示的jbutton的大小。
我正在尝试button.setSize(200,200)和button.setPreferredSize(new Dimension(200,200)),但它没有改变。这是代码:
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Index extends JFrame{
private String title = "This is the motherfucking title";
Dimension dim = new Dimension(500,500);
public Index(){
this.setResizable(false);
this.setTitle(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(dim);
this.getContentPane().setBackground(Color.BLACK);
JButton button = new JButton("Button");
button.setSize(200,200);
this.add(button);
}
public static void main(String args[]){
Index ih = new Index();
ih.setVisible(true);
}
}
结果如下:http://i.imgur.com/Llj0pfo.png
我做错了什么?
答案 0 :(得分:1)
this.add(button);
您正在将该按钮添加到框架的内容窗格中。默认情况下,内容使用BorderLayout
,组件将添加到CENTER
。添加到CENTER
的任何组件都将自动获得框架中可用的额外空间。由于您将帧的大小设置为(500,500),因此可用空间很多。
作为一般规则,您不应尝试设置组件的preferred size
,因为只有组件知道它应该有多大才能正确地绘制自己。所以你的基本代码应该是:
JButton button = new JButton("...");
frame.add(button);
frame.pack();
frame.setVisible(true);
现在按钮将处于首选大小。但是,如果调整框架大小,按钮将改变大小。如果您不想要此行为,则需要使用其他Layout Manager。
答案 1 :(得分:0)
使用SwingUtilities.invokeLater();
在其中创建Index()
,然后在构造函数的末尾调用setVisible(true);
。同时记住,默认情况下JFrame
使用BorderLayout
。
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new Index();
}
});
答案 2 :(得分:0)
试试这个:
JButton button = new JButton("Button");
button.setSize(200,200);
getContentPane().setLayout(null);
getContentPane().add(button);
setVisible(true);
在构造函数中。