2009-12-24 71 views
0

我困住了如何调整第三个按钮的大小,使其与另外两个大小相同,并将其放在底部。无法调整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); 
    } 
} 

回答

0

两条建议:

1)把普通的东西放到实例初始化块中。每当我看到“this()”的呼叫时,我都会不寒而栗。

this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); }

ControlFrame() super(“Control Frame”); }

ControlFrame(int x,int y,int w,int h) super(“Control Frame”); ... }

2)我想摆脱的x,Y,W,H构造......我个人有一个类叫做WindowUtils是有数字出屏幕尺寸的“位置”的方法和然后使用传入的值创建一个窗口,该窗口是屏幕的相对大小。然后创建窗口的代码调用该窗口。我更喜欢尽可能少的构造函数(通常是零或一个,我几乎没有两个或更多)。

3)this.getContentPane()。add(jb_inc);现在可以写成add(jb_inc); - 自从JDK 1.5我想。 4)不要在构造函数中调用可覆盖的方法(所有事情你有这个。之前)。如果一个子类重写“添加”,你可以看到事情中断。所以你可以调用super.add(),或者用其他方法添加,或者让你的类成为最终的。

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

您需要使用LayoutManagers得到你想要的东西。

取决于你想要什么你可能想使用BorderLayout,所以你可以得到底部的按钮。

2

我建议你阅读Using Layout Managers您的代码从Swing教程中的部分,因为您要3个组件添加到BorderLayout的该“中心”,将无法正常工作将无法正常工作启动。选择更能满足您需求的LayoutManager。

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

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

0

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

this.setLayoutManager(null) 
+0

这解决了原始海报问的问题,但除少数情况外,使用'null'布局只是引入了新问题。 – Nate 2009-12-25 04:50:06