按钮不在我告诉他们的地方

Buttons are not being place where I tell them

所以我试图在框架底部的网格中放置 10 个按钮(不使用布局管理器),出于某种原因我无法弄清楚为什么这不起作用,我想知道是否有人可以帮助。

我应该解释一下代码:

基本上我刚刚创建了一个在其中存储“while”的循环,这个 while 在结束并返回循环之前重复 3 次。 while 完成后,Y 改变 85,为接下来的 3 个按钮开始一个新层。循环重复 4 次以创建 4 个不同层,每层 10 个按钮。

谢谢!

主要

public class Main {

    private static JFrame frame = new JFrame();
    private static JPanel panel = new JPanel();
    
    public static void main(String[] args) {
        Buttons.setButtons(frame, panel);
        Window.setFrame(frame, panel);
    }

}

按钮

public class Buttons {
    
    private static JButton b0, b1, b2, b3, b4, b5, b6, b7, b8, b9;
    private static JButton equals;
    private static JButton minus;
    private static JButton plus; 
    private static int i = 0;
    private static int x = 10;
    private static int y = 140;
    
    private static JButton buttons[] = {b0, b1, b2, b3, b4, b5, b6, b7, b8, b9};
    
    public static void setButtons(JFrame frame, JPanel panel) {
        
        for (int b = 0; b < 4; b++) {
            while (i < 3) {
                buttons[i] = new JButton(Integer.toString(i)); 
                buttons[i].setBounds(x, y, 80, 80);
                x = x + 85; 
                buttons[i].setFocusable(false);
                buttons[i].setBackground(Color.GRAY);
                panel.add(buttons[i]);
                i++;
            }
            y = y + 85; 
            x = 10;
        }
        
        System.out.print(y);
        frame.setVisible(true); 
    }
    
}

Window

public class Window {

    public static void setFrame(JFrame frame, JPanel panel) {
        
        frame.setSize(370, 525);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        
        panel.setBounds(10, 140, 200, 200);
        panel.setBackground(Color.DARK_GRAY); 
        frame.add(panel); 
    }
}

也许您认为您在没有布局管理器的情况下工作,因为您没有在 JFrame 上调用 setLayout,但实际上 JFrame 默认给自己一个 BorderLayout

如果您真的想在没有布局管理器的情况下工作,请添加行

frame.setLayout(null);

在您的设置代码中。

感谢这个作品,解决了我的一个问题。另一个问题是“while”在第二个循环后不起作用,所以我不得不重写循环系统,这里是解决方案,以防万一你想使用它(不要使用这个,我是菜鸟。也不要像我一样,使用布局管理器。):

public class Buttons {

private static JButton b0, b1, b2, b3, b4, b5, b6, b7, b8, b9;
private static JButton dot;
private static JButton equals;
private static JButton minus;
private static JButton plus;
private static int count = 9;
private static int x = 10;
private static int y = 145;

private static JButton buttons[] = {b0, b1, b2, b3, b4, b5, b6, b7, b8, b9};

public static void setButtons(JFrame frame, JPanel panel) {
    
    for (int b = 3; b > 0; b--) {
        for (int i = 3; i > 0 ; i--) {
        buttons[count] = new JButton(Integer.toString(count)); 
        buttons[count].setBounds(x, y, 80, 80);
        x = x + 85; 
        buttons[count].setFocusable(false);
        buttons[count].setBackground(Color.GRAY);
        panel.add(buttons[count]);
        count--;
        }
        y = y + 85; 
        x = 10;
    }
    
    dot = new JButton(".");
    dot.setBounds(x, y, 80, 80);
    dot.setFocusable(false);
    dot.setBackground(new Color(0, 200, 150));
    panel.add(dot);
    
    buttons[0] = new JButton("0");
    x = x + 85;
    buttons[0].setBounds(x, y, 80, 80);
    buttons[0].setFocusable(false);
    buttons[0].setBackground(Color.GRAY);
    panel.add(buttons[0]);
    
    plus = new JButton("+");
    x = x + 85; 
    plus.setBounds(x, y, 80, 80); 
    plus.setFocusable(false);
    plus.setBackground(new Color(0, 200, 150));
    panel.add(plus);
    
    minus = new JButton("-");
    x = x + 85;
    minus.setBounds(x, y, 80, 80);
    minus.setFocusable(false);
    minus.setBackground(new Color(0, 200, 150));
    panel.add(minus); 
    
    equals = new JButton("=");
    y = 145;
    equals.setBounds(x, y, 80, 250);
    equals.setFocusable(false);
    equals.setBackground(new Color(240, 150, 50));
    panel.add(equals); 
    
    frame.setVisible(true); 
}

}