Как называется нажатая кнопка? - PullRequest
0 голосов
/ 04 декабря 2011

У меня есть массив JButton и я генерирую 100 кнопок с

 for(i=0;i<button.length;i++)

, но не могу понять, что поместить как e.getSource (), т.е. Другими словами, как узнать, как называется кнопка, созданная в массиве, в случае e.getSource.

 import javax.swing.*;  
 import javax.swing.border.Border;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.ArrayList;
 import java.awt.*;
 import java.awt.event.*;

 public class map {
     static int i;
     JFrame frame = new JFrame("D&D");
     public map() {
        int a=0,b=50;
        JFrame.setDefaultLookAndFeelDecorated(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100,0,1000,600);
        frame.getContentPane().setLayout(null);      
        frame.setVisible(true);
        frame.setBackground(Color.black);
        frame.setResizable(false);
        for(i=0;i<button.length;i++){
            a=a+50;
            if(a>549) {
                b=b+50;
                a=50;
            }
            button[i]= new JButton(SD);
            frame.getContentPane().add(button[i]);
            button[i].setBounds(a, b, 50,50);
            button[i].setFont(new Font("Blackmoor Let", Font.BOLD, 30));
            button[i].setForeground(Color.red);
            button[i].setBorder(border);
            button[i].addActionListener(boardListener);
      }
    }

    ActionListener boardListener = new ActionListener (){
        public void actionPerformed(ActionEvent e){
            System.out.print("\n" +e.getSource());            
            if (e.getSource()==button[i]){              
                System.out.println("hi");
            }
        }
    };

    public static void main(String[]args){
         new map();
    }
}

Ответы [ 3 ]

2 голосов
/ 04 декабря 2011

Используйте List<JButton> вместо JButton[] для удержания кнопок и используйте

 int index = listOfButtons.indexOf(e.getSource())

чтобы узнать индекс нажатой кнопки.

Чтобы создать и заполнить список:

List<JButton> listOfButtons = new ArrayList<JButton>(100);
for (int i = 0; i < 100; i++) {
    JButton button = ...;        
    listOfButtons.add(button);
}

Если вы хотите преобразовать массив JButtons в List<JButton> (но здесь это не нужно), просто используйте

List<JButton> listOfButtons = Arrays.asList(buttons);
2 голосов
/ 04 декабря 2011

Цикл над массивом Button:

for (int i = 0; i < button.length; ++i) {
    if (e.getSource()==button[i]);{
        System.out.println("Button " + i + " pressed");
    }
}
1 голос
/ 04 декабря 2011

Когда вы создаете свои кнопки, попробуйте это:

button[i].setActionCommand(i);

И когда вы получите ActionEven, попробуйте:

e.getActionCommand();

Метод getActionCommand () возвращает ваш i как строку, так что вы будетедолжен разобрать его в int.

...