我试图创建一个简单的扫雷游戏(用户可自定义)。
在编写它时,我尝试创建一个 JButtons
的网格。 (通过 JButton
数组)使用 netbeans 设计 View 并将此代码输入到 JPanel
中:
JButton mines[] = new JButton [gridXVal*gridYVal];
mineGrid.setLayout(new java.awt.GridLayout(gridXVal,gridYVal));
for (int i = 0 ; i < mines.length ; i++)
{
mines [i] = new JButton(" ");
mines [i].setActionCommand ("" + i);
mines[i].addActionListener(listener);
//mines [i].setBorder (null);
//mines [i].setBorderPainted (false);
mineGrid.add (mines [i]);
}
后来,当我通过方法访问它时
ImageIcon icon = new ImageIcon(mineCounter+".png");
mines[a].setIcon(icon);
它给了我一个错误,"cannot find symbol"
。我尝试配置 JPanel
因此它是公开的,但我仍然无法在我的方法中预生成的代码之外对其进行编辑。
这是当我单击按钮尝试将其图像设置为某些内容时出现的错误:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException:
Uncompilable source code - Erroneous sym type: <any>.setIcon
at gameScreen.clickDraw(gameScreen.java:227)
at gameScreen$3.actionPerformed(gameScreen.java:170)
任何帮助将不胜感激!
最佳答案
我假设这部分代码:
mineGrid.setLayout(new java.awt.GridLayout(1, 0));
JButton mines[] = new JButton [gridXVal*gridYVal];
mineGrid.setLayout(new java.awt.GridLayout(gridXVal,gridYVal));
for (int i = 0 ; i < mines.length ; i++)
{
mines [i] = new JButton(" ");
mines [i].setActionCommand ("" + i);
mines[i].addActionListener(listener);
//mines [i].setBorder (null);
//mines [i].setBorderPainted (false);
mineGrid.add (mines [i]);
}
由您通过 Netbeans 中的“代码”编辑选项之一手动输入。
您需要采用JButton mines[] = new JButton [gridXVal*gridYVal];
并在类级别声明它并修改您的“自定义代码”以初始化此变量...
private JButton mines[];
private void initComponents() {
//...
mineGrid.setLayout(new java.awt.GridLayout(1, 0));
JButton mines[] = new JButton [gridXVal*gridYVal];
mineGrid.setLayout(new java.awt.GridLayout(gridXVal,gridYVal));
for (int i = 0 ; i < mines.length ; i++)
{
mines [i] = new JButton(" ");
mines [i].setActionCommand ("" + i);
mines[i].addActionListener(listener);
//mines [i].setBorder (null);
//mines [i].setBorderPainted (false);
mineGrid.add (mines [i]);
}
//...
}// </editor-fold>
关于java - 无法访问在设计 View 中创建的 Netbeans 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45316337/