无法调整JButton的大小

时间:2009-12-24 15:22:51

标签: java resize jbutton

我很困惑如何调整第三个按钮的大小,使其与其他两个按钮大小相同,并将其放在底部。

class ControlFrame extends JFrame 
    implements Runnable
{
    JButton jb_inc = new JButton();
    JButton jb_zero = new JButton();
    JButton jb_dec = new JButton();

    ControlFrame() {
        super("Control Frame");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    ControlFrame(int x,int y, int w, int h) {
        this();
        this.setBounds(x, y, w, h);
        this.setVisible(true);

        jb_inc.setBounds(10,10,90,20);
        jb_zero.setBounds(10,40,90,20);
        jb_dec.setBounds(10,60,90,20);

        jb_inc.setVisible(true);
        jb_zero.setVisible(true);
        jb_dec.setVisible(true);

        this.getContentPane().add(jb_inc);
        this.getContentPane().add(jb_zero);
        this.getContentPane().add(jb_dec);

    }

    public void run() {
    }
}

public class Counting_Machine 
{
    public static void main(String[] args) {
        ControlFrame cf = new ControlFrame(0,200,80,150);
    }
}

3 个答案:

答案 0 :(得分:2)

我建议您首先阅读Using Layout Managers上的Swing教程中的部分。您的代码将无效,因为您尝试将3个组件添加到BorderLayout的“中心”,这将无效。选择更符合您需求的LayoutManager。

使用布局管理器时无需使用setBounds(...)方法。布局管理器的工作是根据布局管理器的规则定位组件。由于您尚未向按钮添加任何文本,因此每个按钮的首选大小应相同。

此外,不需要在按钮上调用setVisible(),默认情况下所有Swing组件都是可见的,除了顶级容器(JFrame,JDialog)。

答案 1 :(得分:0)

两个建议:

1)将常见事物放入实例初始化块中。我个人看到“this()”的电话时,我个人不寒而栗。

{     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); }

ControlFrame() {     超级(“控制框架”); }

ControlFrame(int x,int y,int w,int h) {     超级(“控制框架”);     ... }

2)我会摆脱x,y,w,h构造函数...我个人有一个名为WindowUtils的类,它有一个“位置”方法,用于计算屏幕大小,然后使用传入的值创建一个窗口,它是屏幕的相对大小。然后创建窗口的代码调用它。我更喜欢尽可能少的构造函数(通常是零或一,我几乎没有两个或更多)。

3)this.getContentPane()。add(jb_inc);现在可以写成add(jb_inc); - 自JDK 1.5以来我认为。

4)永远不要在构造函数中调用可重写的方法(之前你拥有的所有东西)。如果子类要覆盖“添加”,你可能会看到事情中断。所以你可以调用super.add(),或者在另一种方法中添加,或者让你的类最终。

现在回答你的问题......: - )

您需要使用LayoutManagers来获得所需内容。

根据您的需要,您可能希望使用BorderLayout,这样您就可以获得底部的按钮。

答案 2 :(得分:0)

由于您在所有内容上设置边界,因此根本不需要LayoutManager。将LayoutManager设置为null,然后您可以自己定位所有内容,就像您在示例中一样。

this.setLayoutManager(null)