JFrame窗口在每次编译时调整大小。每次都有不同的结果
问题描述:
呃,我不太清楚发生了什么......对于我来说,我甚至都没有尝试过从IDE中连续运行几次应用程序进行调试。我决定直接来这里解释一下我认为的奇怪。JFrame窗口在每次编译时调整大小。每次都有不同的结果
我想创建一个棕褐色和米色方块的棋盘,我有一个JFrame窗口设置为1024x1024尺寸,所以一个正方形。我也正在使用8x8的gridLayout。
每当我运行应用程序时,我可能会得到一个6x8的网格,下一个运行5 x8或接下来的7x7。
不知道发生了什么事...任何帮助将是甜蜜的!
public class ChessBoard extends JFrame{
private final JFrame board = new JFrame();
private final JButton button = new JButton();
private final GridLayout grid = new GridLayout(8, 8);
public ChessBoard(){
board.setSize(1024, 1024);
board.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
board.setVisible(true);
board.setLayout(grid);
AddGridColors();
}
private void AddGridColors(){
Color tanColor = new Color(210, 180, 140);
Color beigeColor = new Color(245, 245, 220);
JPanel[] panelArray = new JPanel[63];
int panelArrayIndex;
for(panelArrayIndex = 0; panelArrayIndex < 63; ++panelArrayIndex){
panelArray[panelArrayIndex] = new JPanel();
if(panelArrayIndex == 0){
panelArray[panelArrayIndex].setBackground(tanColor);//tan
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}
if(panelArrayIndex > 0){
if(panelArrayIndex % 8 == 0){
panelArray[panelArrayIndex].setBackground(beigeColor);
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}
if(panelArray[panelArrayIndex-1].getBackground().equals(tanColor)){
panelArray[panelArrayIndex].setBackground(beigeColor);
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}else{
panelArray[panelArrayIndex].setBackground(tanColor);
panelArray[panelArrayIndex].add(new JLabel("square"+panelArrayIndex));
board.add(panelArray[panelArrayIndex]);
}
}
}
}
这是正常的,我错过了一些令人难以置信的明显的东西?
答
从我上面的评论:
你能尝试移动调用
AddGridColors();
以前setSize(1024, 1024);
权这可能是因为你调用setVisible(true);
添加完所有的元素之前JFrame
,从而导致这样的问题。
setVisible(true);
应该是您的程序的最后一行。
顺便说一句遵循Java naming conventions
firstWordLowerCaseVariable
firstWordLowerCaseMethod()
FirstWordUpperCaseClass
ALL_WORDS_UPPER_CASE_CONSTANT
我这样说:
此外,你的for循环不应该从0到64而不是0到63?
因为你的for循环是从0-63
去(不包括63
)
for(panelArrayIndex = 0; panelArrayIndex < 63; ++panelArrayIndex){
应该是:
for(panelArrayIndex = 0; panelArrayIndex < 64; ++panelArrayIndex){
或者
for(panelArrayIndex = 0; panelArrayIndex <= 63; ++panelArrayIndex){
但同样要去为你的小组的a rray(有63种元素,不是64):
JPanel[] panelArray = new JPanel[63];
应该是:
JPanel[] panelArray = new JPanel[64];
“*对于我的生活**我甚至没有尝试和调试**运行该应用程序后,从IDE连续几次。我决定直接来这里解释一下我认为很奇怪的东西*“ - 不是很酷......去调试,要求调试帮助实际上被认为是脱离主题,我们不是一个错误查找服务 - 这就是调试器 –
你可以试着将调用移动到'AddGridColors();'setSize(1024,1024)之前;'?如果有帮助,让我知道,这样我就可以解释发生了什么。 -loop是从0到64而不是0到63? – Frakcool
此外'公共类ChessBoard扩展JFrame {'和'私有final JFrame board = new JFrame();'没有意义,你没有任何扩展'JFrame'原因 – Ansharja