按钮不在我告诉他们的地方
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);
}
}
所以我试图在框架底部的网格中放置 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);
}
}