ошибка: не удается найти vcvarsall.bat

Метод 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();
   }
}
840
задан Stevoisiak 23 October 2017 в 16:32
поделиться

2 ответа

Похоже, он ищет компиляторы VC, поэтому вы можете попытаться указать тип компилятора с помощью -c mingw32 , поскольку у вас есть msys

python setup.py install -c mingw32
23
ответ дан 22 November 2019 в 21:11
поделиться

Я нашел решение. У меня была точно такая же проблема и ошибка при установке 'amara'. У меня был установлен mingw32, но нужно было настроить distutils.

  1. У меня есть Python 2.6, который уже был установлен.
  2. Я установил mingw32 в C:\programs\mingw\
  3. Добавьте каталог bin mingw32 в переменную окружения: добавьте c:\programs\MinGW\bin; в PATH
  4. Отредактируйте (создайте, если не существует) distutils. cfg файл, расположенный по адресу C:\Python26\Lib\distutils\distutils.cfg, чтобы он был:

    [build]
    compiler=mingw32
    
  5. Теперь запустите easy_install.exe amara.

Убедитесь, что среда установлена, открыв новый cmd.exe.

225
ответ дан 22 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: