首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JRuby代码中转换Java内部类的使用

如何在JRuby代码中转换Java内部类的使用
EN

Stack Overflow用户
提问于 2014-01-20 22:37:11
回答 1查看 91关注 0票数 1

我正在尝试使用Java来处理JRuby :这里和那里的例子都是,我试图将它们从纯Java转换为JRuby。这很好,特别是在阅读了优秀站点齐特码中专门针对Jruby的部分之后。

然而,有些事情我仍然不知道如何翻译。

例如,选择这是霍斯特曼书中的java代码,如何正确地将其转换为JRuby?在这段代码中(在Jpanel构造函数中),我们依赖于MouseAdapter的内部类。其余的都很简单。

如何翻译这样的内部类(或更充分的“匿名”类)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-21 09:49:45

只需重构/调整零件来为你工作。

代码语言:javascript
运行
复制
frame = javax.swing.JFrame.new
frame.title = "MouseTest"
frame.set_size(300, 200)
frame.add_window_listener do |evt|
  if evt.getID == java.awt.event.WindowEvent::WINDOW_CLOSING
    java.lang.System.exit(0)
  end
end

class MousePanel < Java::JavaxSwing::JPanel

   SQUARELENGTH = 10; MAXNSQUARES = 100;

  def initialize
    super
    @squares = []; @current = nil
    add_mouse_listener self
    add_mouse_motion_listener self
  end

  def add(x, y)
    if @squares.size < MAXNSQUARES
       @current = @squares.size
       @squares << Point.new(x, y)
       repaint
    end
  end

  def remove(n)
    return if (n < 0 || n >= @squares.size)
    @squares.pop
    @squares[n] = @squares[@squares.size];
    @current = nil if @current == n
    repaint
  end

  def paintComponent(graphics)
    super
    @squares.each { |square| do_draw(graphics, square) }
  end

  def do_draw(graphics, square)
    graphics.drawRect(
      square.x - SQUARELENGTH / 2,
      square.y - SQUARELENGTH / 2,
      SQUARELENGTH, SQUARELENGTH
    )
  end
  private :do_draw

  include java.awt.event.MouseListener

  [ 'mouseEntered', 'mouseExited', 'mouseReleased' ].each do |method|
    class_eval "def #{method}(evt); end"
  end

  def mousePressed(evt)
    puts "mousePressed #{evt}"
  end

  def mouseClicked(evt)
    puts "mouseClicked #{evt}"
  end

  include java.awt.event.MouseMotionListener

  def mouseMoved(evt)
    puts "mouseMoved #{evt}"
  end

  def mouseDragged(evt)
    puts "mouseDragged #{evt}"
  end

end

frame.content_pane.add MousePanel.new
frame.show

注意到所有更新的*add_xxx_listener事件..。

将其放入可读/可分(包括原始代码)的要点中:https://gist.github.com/kares/8538048

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21245604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档