英文:
Buttons are not being place where I tell them
问题
以下是您要翻译的内容:
"So I was trying to place 10 buttons in a grid at the bottom of my frame (without using a layout manager) and for some reason I cannot figure out why this isn't working, I was wondering if anyone could help.
I should probably explain the code:
Basically I have just created a loop that stores a 'while' in it, this while is repeated 3 times before ending and going back to the loop. After the while is finished, the Y changes by 85 to start a new layer for the next 3 buttons. The loop repeats 4 times to create 4 different layers of 10 buttons.
Thanks!
Main
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);
	}
}
Buttons
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); 
	}
}
英文:
So I was trying to place 10 buttons in a grid at the bottom of my frame (without using a layout manager) and for some reason I cannot figure out why this isn't working, I was wondering if anyone could help.
I should probably explain the code:
Basically I have just created a loop that stores a "while" in it, this while is repeated 3 times before ending and going back to the loop. After the while is finished, the Y changes by 85 to start a new layer for the next 3 buttons. The loop repeats 4 times to create 4 different layers of 10 buttons.
Thanks!
Main
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);
	}
}
Buttons
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); 
	}
}
答案1
得分: -2
Here's the translated code:
感谢,这个代码有效,并解决了我的一个问题。另一个问题是在第二次循环后“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); 
	}
	
}
I've translated the code as requested.
英文:
Thanks this works, and solved one of my problems. The other problem was that the "while" did not work after the second loop so I had to rewrite the loop system, here is the solution just in case you want to use it (don't use this, I'm a noob. Also don't be like me, use a layout manager.):
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); 
}
}
答案2
得分: -3
也许你认为你没有使用布局管理器,因为你没有在你的 JFrame 上调用 setLayout,但事实上,默认情况下,JFrame 会自动使用 BorderLayout 布局。
如果你确实想要不使用布局管理器,请在你的设置代码中添加以下行:
frame.setLayout(null);
英文:
Maybe you think you're working without a layout manager because you haven't called setLayout on your JFrame, but in fact the JFrame gave itself a BorderLayout by default.
If you truly want to work without a layout manager, add the line
frame.setLayout(null);
in your setup code.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论