我很困惑如何调整第三个按钮的大小,使其与其他两个按钮大小相同,并将其放在底部。
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 :(得分: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)