0

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

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);
    }
}
4

3 回答 3

2

我建议您首先阅读 Swing 教程中关于使用布局管理器的部分您的代码将无法工作,因为您试图将 3 个组件添加到 BorderLayout 的“中心”,这将无法工作。选择一个更能满足您需求的 LayoutManager。

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

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

于 2009-12-24T15:50:06.840 回答
0

两个建议:

1)将常用的东西放入实例初始化块中。就个人而言,每当我看到对“this()”的调用时,我都会不寒而栗。

{ this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); }

ControlFrame() { super("控制帧"); }

ControlFrame(int x,int y, int w, int h) { super("控制帧"); ... }

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

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

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

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

你需要使用LayoutManagers来获得你想要的东西。

根据您想要的内容,您可能想要使用 BorderLayout 以便您可以获得底部的按钮。

于 2009-12-24T15:51:19.547 回答
0

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

this.setLayoutManager(null)
于 2009-12-24T16:13:11.500 回答