java - 制作 JButton 的 ArrayList 时出错?
问题描述
我正在尝试自己编写俄罗斯方块游戏。我创建了一个处理控件的类,其中发生了以下情况:
- 询问玩家是否可以使用默认控件并将其列出
- 如果他们单击“否”,则会
JFrame
弹出另一个询问他们想要更改哪个按钮。这是我创建ArrayList
JButtons 的地方,所以当它们都做基本相同的事情时,我不必单独制作每个。 - 当有人单击其中一个控件时,它会出现另一个 JFrame,询问他们想要替换该控件的键。
现在问题来了。当我运行代码时,单击否(我想更改控件)后,控制台会引发空指针异常。我对此感到困惑,我有什么遗漏吗?我是使用 JFrame 的新手,这是我处理所有这些的方法:
public void changeControls() {
JFrame controls = new JFrame();
JPanel panelControls = new JPanel();
JLabel controlLabel = new JLabel("Change which control?");
controls.add(panel, BorderLayout.CENTER);
controls.setPreferredSize(new Dimension(600, 600));
controls.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
controls.setTitle("Change Controls");
controls.setVisible(true);
controls.pack();
panelControls.setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
panelControls.setSize(600, 600);
panelControls.setLayout(new GridLayout(0, 1));
panelControls.add(controlLabel);
String[] names = {"Move Piece Right", "Move Piece Left", "Soft Drop", "Hard Drop", "Rotate Right", "Rotate Left"};
ArrayList<JButton> buttons = new ArrayList<JButton>();
for (int i = 0; i < 6; i++) {
buttons.add(new JButton(names[i]));
final Integer counter = Integer.valueOf(i);
final String type = names[i];
buttons.get(i).addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
JFrame editControl = new JFrame();
JPanel editControlPanel = new JPanel();
JLabel editLabel = new JLabel("Change controls for " + names[counter]);
JButton okay = new JButton("Click to Change to above text.");
JTextField text = new JTextField();
text.setColumns(1);
editControl.add(panel, BorderLayout.CENTER);
editControl.setPreferredSize(new Dimension(600, 600));
editControl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
editControl.setTitle("Change Controls");
editControl.pack();
editControlPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
editControlPanel.setSize(600, 600);
editControlPanel.setLayout(new GridLayout(0, 1));
editControlPanel.add(editLabel);
editControlPanel.add(text);
okay.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
editControl.dispose();
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
});
editControlPanel.add(okay);
KeyStroke ks = KeyStroke.getKeyStroke(text.getText());
switch(type) {
case "Move Piece Right":
moveRight = ks.getKeyCode();
case "Move Piece Left":
moveLeft = ks.getKeyCode();
case "Soft Drop":
softDrop = ks.getKeyCode();
case "Hard Drop":
hardDrop = ks.getKeyCode();
case "Rotate Right":
rotateRight = ks.getKeyCode();
case "Rotate Left":
rotateLeft = ks.getKeyCode();
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
});
panelControls.add(buttons.get(i));
}
controls.dispose();
startGame();
}
感谢您提前提供的所有帮助。此外,错误在这一行:
controls.add(panel, BorderLayout.CENTER);
解决方案
推荐阅读
- django - 如何获取到我的views.py的网页的完整路径?
- python - 如何在执行比较时忽略 Nan
- vue.js - 如何将锚链接添加到页面的各个部分?
- botframework - 如何在 Bot Framework 中获取用户详细信息
- c# - 当字符串值具有“\r\n\r\n”时,如何在c#中基于“\r\n”拆分字符串
- java - 猜数字android应用程序-输入空值后崩溃
- javascript - Flutter Web:使用 flutter build web 构建时缺少 main.dart.js 和 JavaScript 文件,但使用 flutter run 可以正常工作
- javascript - 如何编辑或调用这个 jQuery 函数来处理原生 JavaScript onmouseout?
- json - 在 Zapier 中处理列响应,其中一列为空白
- java - 即使行上没有任何内容为空,空指针异常