我一直在努力解决这个问题,我试图构建一个利用MVC模式的程序,它根据用户输入动态创建一个按钮网格(nxn)。但是我无法将听众附加到他们身上。
编辑:我的意思是我想在Controller类中处理事件以符合MVC模式
查看
public class AIGameView extends javax.swing.JFrame {
private AIGameModel model;
private JButton[][] btn_arr;
public AIGameView(AIGameModel m) {
model = m;
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {...}
private void startBtnActionPerformed(java.awt.event.ActionEvent evt) {
options.setVisible(false);
int size = Integer.parseInt(size_field.getText());
model.setSize(size);
btn_arr = new JButton[size][size];
GameGUI.setLayout(new java.awt.GridLayout(size, size));
for(int y = 0; y < size; y++) {
for(int x = 0; x < size; x++) {
btn_arr[y][x] = new JButton();
btn_arr[y][x].setBackground(Color.white);
GameGUI.add(btn_arr[y][x]);
btn_arr[y][x].setVisible(true);
}
}
GameGUI.setVisible(true);
GameGUI.revalidate();
GameGUI.repaint();
}
控制器
public class AIGameController {
private AIGameView view;
private AIGameModel model;
private JButton[][] buttons;
public AIGameController(AIGameModel m, AIGameView v) {
view = v;
model = m;
}
我已经尝试了几件事,但似乎没有什么可以解决这个问题,而且我最终只是以空指针异常结束。对此有何建议?
答案 0 :(得分:1)
从您目前发布的代码中,您似乎可以添加一个电话
btn_arr[y][x] = new JButton();
btn_arr[y][x].addActionListener(createActionListener(y, x));
...
使用像
这样的方法private ActionListener createActionListener(final int y, final int x)
{
return new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Clicked "+y+" "+x);
// Some method that should be called in
// response to the button click:
clickedButton(y,x);
}
};
}
private void clickedButton(int y, int x)
{
// Do whatever has to be done now...
}
答案 1 :(得分:0)
当你进行初始化循环时:
for(int x = 0; x < size; x++) {
btn_arr[y][x] = new JButton();
btn_arr[y][x].setBackground(Color.white);
GameGUI.add(btn_arr[y][x]);
btn_arr[y][x].setVisible(true);
btn_arr[y][x].addActionListener( new YourListener() );
}