JButton没有改变大小

时间:2014-12-27 00:30:42

标签: java jbutton

我研究了如何更改要在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

我做错了什么?

3 个答案:

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

在构造函数中。