Выбрав JButton из 2d-массива, выполните действие

#java #arrays #jbutton

#java #массивы #jbutton

Вопрос:

У меня есть 2-мерный массив JButtons, и я хотел бы иметь возможность использовать кнопку, на которую наведена моя мышь, для выполнения действия, такого как изменение цвета. Как я могу это сделать? Спасибо.

Вот как я создаю кнопки:

 for(int r = 0;r<10;r  ){
        for(int c = 0;c<10;c  ){
            buttonArray[r][c] = new JButton();
        }
    }
  

Комментарии:

1. Вы можете создать прослушиватель для каждой кнопки и внутри прослушивателя добавить конкретную работу, которую вы хотите выполнить. Посмотрите на этот пример цвета фона JButton при наведении курсора мыши .

2. Спасибо! Это очень помогло

Ответ №1:

Вот пример использования цикла и MouseAdapter (поскольку вам не нужны все методы из MouseListener ) :

 import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JButtonHighlighter extends JPanel {

    public static void main(final String[] args) {

        JFrame frame = new JFrame();

        JPanel contentPanel = new JPanel();
        contentPanel.setLayout(new GridLayout(10, 10));

        JButton[][] buttonArray = new JButton[10][10];

        for (int r = 0; r < 10; r  ) {
            for (int c = 0; c < 10; c  ) {

                final JButton newButton = new JButton();

                final Color originalColor = newButton.getBackground();
                final Color highlightColor = Color.GREEN;

                newButton.addMouseListener(new MouseAdapter() {

                    @Override
                    public void mouseEntered(final MouseEvent e) {
                        newButton.setBackground(highlightColor);

                    }

                    @Override
                    public void mouseExited(final MouseEvent e) {
                        newButton.setBackground(originalColor);

                    }

                });

                buttonArray[r][c] = newButton;

                contentPanel.add(newButton);
            }
        }

        frame.setContentPane(contentPanel);
        frame.setSize(100, 100);
        frame.setVisible(true);

    }

}