添加带有动作侦听器的按钮时,不允许使用void类型?

时间:2015-03-08 22:06:17

标签: java swing button

GridLayout grid = new GridLayout(4, 4, 10, 10);

//Add the grid to the frame
frame.setLayout(grid);

for (int i = 0; i < 16; i++){
    frame.add(new JButton("Button: " + i)
            .addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("you clicked me!");
        }

    }));

}

我想知道为什么它一直给我带来麻烦,为网格上的每个按钮添加一个动作监听器。

基本上我正在尝试打印网格上按钮的位置。 例如:按钮3是位置(0,3)

2 个答案:

答案 0 :(得分:1)

您正在向框架添加addActionListener方法的结果,即void

这应该有效:

for (int i = 0; i < 16; i++) {
    JButton button = new JButton("Button: " + i);
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("you clicked me!");
        }
    });
    frame.add(button);
}

答案 1 :(得分:0)

JButton.addActionListener()不会返回JButton。它返回void。要修复,请创建一个新的JButton,然后添加它。

frame.setLayout(grid);

for(int i = 0; i < 16; i++){
    JButton j = new JButton("Button: " + i);
    j.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("you clicked me!");
        }

    }));
    frame.add(j);
}

希望这有帮助。