代码之家  ›  专栏  ›  技术社区  ›  Karl

无法调整jButton的大小

  •  0
  • Karl  · 技术社区  · 6 年前

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

    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 回复  |  直到 15 年前
        1
  •  0
  •   TofuBeer    15 年前

    两个建议:

    1)把常见的东西放到实例初始化块中。每当我看到呼叫“this()”时,我都会战栗。

    { this.setDefaultCloseOperation(windowConstants.exit在关闭时退出); }

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

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

    2)我会去掉x,y,w,h构造器…就我个人而言,我有一个叫做windowutils的类,它有一个“position”方法来计算屏幕大小,然后使用传入的值来创建一个与屏幕相对大小的窗口。然后创建窗口的代码调用这个。我更喜欢尽可能少的构造器(通常是0或1,我很少有两个或更多的构造器)。

    3)这个.getContentPane().add(jb_inc);现在可以写成add(jb_inc);-因为jdk 1.5我认为。

    4)永远不要调用可重写的方法(所有您拥有的方法)。之前)在构造函数内。如果一个子类重写了“添加”,你会看到一些东西被破坏了。所以您可以调用super.add(),或者在另一个方法中执行加法,或者使类成为最终类。

    现在回答你的问题…-)

    你需要利用 LayoutManagers 得到你想要的。

    根据需要,您可能希望使用边框布局,以便可以在底部获得按钮。

        2
  •  2
  •   camickr    15 年前

    我建议你从阅读摇摆教程的部分开始 Using Layout Managers 您的代码将无法工作,因为您正试图将3个组件添加到无法工作的borderlayout的“中心”。选择一个更好地满足您需求的外派经理。

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

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

        3
  •  0
  •   Sam Barnum    15 年前

    既然你对每件事都设定了界限,你根本不需要一个外派经理。将LayoutManager设置为空,然后您可以自己定位所有内容,如示例中所示。

    this.setLayoutManager(null)