Метод MouseEvent#getSource
вернет, какой объект был нажат:
public class MouseAdapterMod extends MouseAdapter {
// usually better off with mousePressed rather than clicked
public void mousePressed(MouseEvent e) {
ButtonPanel btnPanel = (ButtonPanel)e.getSource();
btnPanel.setButtonText();
}
}
Как замечают комментарии, вам часто лучше слушать mousePressed или mouseReleased, а не mouseClicked, потому что для mouseClicked для работы , пресса и релиз должны быть в одной и той же точке, и если мышь сдвигается даже небольшую сумму, клик не будет регистрироваться.
Моя тестовая программа:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class MainForButtonPanel extends JPanel {
public MainForButtonPanel() {
setLayout(new GridLayout(4, 4));
MouseAdapter myMA = new MouseAdapterMod();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
ButtonPanel btnPanel = new ButtonPanel();
btnPanel.addMouseListener(myMA);
add(btnPanel);
}
}
}
private static void createAndShowUI() {
JFrame frame = new JFrame("MainForButtonPanel");
frame.getContentPane().add(new MainForButtonPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
class ButtonPanel extends JPanel {
private static final int TIMER_DELAY = 2000;
private static final String JUST_CLICKED = "just clicked";
private static final String WAITING_FOR_CLICK = "waiting for click";
private static final Color CLICKED_COLOR = Color.pink;
private JLabel label;
public ButtonPanel() {
label = new JLabel(WAITING_FOR_CLICK);
add(label);
}
public void setButtonText() {
label.setText(JUST_CLICKED);
setBackground(CLICKED_COLOR);
new Timer(TIMER_DELAY, new ActionListener() {
public void actionPerformed(ActionEvent ae) {
label.setText(WAITING_FOR_CLICK);
setBackground(null);
((Timer)ae.getSource()).stop();
}
}).start();
}
}
class MouseAdapterMod extends MouseAdapter {
// usually better off with mousePressed rather than clicked
public void mousePressed(MouseEvent e) {
ButtonPanel btnPanel = (ButtonPanel)e.getSource();
btnPanel.setButtonText();
}
}
Похоже, он ищет компиляторы VC, поэтому вы можете попытаться указать тип компилятора с помощью -c mingw32
, поскольку у вас есть msys
python setup.py install -c mingw32
Я нашел решение. У меня была точно такая же проблема и ошибка при установке 'amara'. У меня был установлен mingw32, но нужно было настроить distutils.
C:\programs\mingw\
c:\programs\MinGW\bin;
в PATHОтредактируйте (создайте, если не существует) distutils. cfg файл, расположенный по адресу C:\Python26\Lib\distutils\distutils.cfg
, чтобы он был:
[build]
compiler=mingw32
Теперь запустите easy_install.exe amara
.
Убедитесь, что среда установлена, открыв новый cmd.exe
.