Обработка изображений, расширяя JPanel и Моделируя Классы в Clojure

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

то же самое с монитором, ориентированным в режиме портрета, можно легко понять намерение нескольких связанных функций, пересмотренных или иначе. Но не позволяйте портрету наличия экранировать быть оправданием записать функцию со многими строками.

Запись этого на stackoverflow использование портрета экранирует:-)

, я могу легко видеть много сообщений на один взгляд:-)

7
задан Community 23 May 2017 в 11:55
поделиться

1 ответ

  1. прокси фактически создает экземпляр tada! Вам не нужно создавать конструктор.

  2. Да, но вместо этого рассмотрите возможность использования clojure ref. Также неприятно использовать def, подобный этому, во второй последней строке! он создает глобальную привязку для щелчка мышью, когда ваша логика основана на лексической области видимости, созданной let.

  3. (proxy-super paintComponent g), и да, "this" доступно

Это работает для меня:

(let [click (ref nil)
      panel (proxy [javax.swing.JPanel] []
              (paintComponent [g]
                (proxy-super paintComponent g)
                (.drawImage g (.getImage
                            (javax.swing.ImageIcon. "play.png"))
                            0 0 (.getWidth this) (.getHeight this) nil)
                (if @click
                  (.fillRect g (:x @click) (:y @click) 10 10))))]
  (.addMouseListener panel
      (proxy [java.awt.event.MouseAdapter] []
        (mouseClicked [e]
          (let [p (.getPoint e)]
            (dosync (ref-set click {:x (.x p), :y (.y p)})))
          (javax.swing.SwingUtilities/invokeLater #(.repaint panel)))))
  (doto (javax.swing.JFrame.)
    (.setContentPane panel)
    (.setSize 200 200)
    (.show)))
8
ответ дан 7 December 2019 в 05:25
поделиться
Другие вопросы по тегам:

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