2

您好,我正在使用 jruby 编写应用程序,但目前在实现DocumentSizeFilter. 目前我正在尝试解决两个问题。

  1. 调用 super.insertString (或我之前尝试过的 super.repalce )不断触发 JRuby 中未找到的方法,但该方法正在被调用。
  2. 另外为什么在插入时调用替换而不是插入?

PS:这两个文件都是使用

jruby 1.7.1 (1.9.3p327) 2012-12-03 30a153b on OpenJDK 64-Bit Server VM 1.7.0_09-b30 [linux-amd64]

以下是我目前正在使用的测试文件:

#JavaUtilities\DocumentSizeFilter.rb
module JavaUtilities
    class DocumentSizeFilter < DocumentFilter
        def initialize max_char
            super()
            @MAX_CHAR = max_char
        end
        def insertString(fb, offset, string, attrs) 
            puts 'doing insert'
            super.insertString(fb, offset, string, attrs)
        end
        def remove(fb, offset, length) 
            puts 'doing remove'
        end

        def replace(fb,  offset, length, text, attrs) 
            puts 'doing replace'
            super.insertString(fb, offset, text, attrs)
        end
    end
end


    #test.rb
include Java
java_import java.awt.event.WindowEvent;
java_import javax.swing.JButton;
java_import javax.swing.border.Border;
java_import java.awt.Graphics;
java_import javax.swing.JFrame
java_import javax.swing.text.DocumentFilter;
java_import javax.swing.JTextArea;
require 'JavaUtilities/DocumentSizeFilter'
class JFrames < JFrame
    def initialize
        super "HI"
        self.setSize 500,500
        self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
        self.setLayout nil
        add(area = (JTextArea.new ))
        area.setBounds 30,30,100,40
        area.getDocument.setDocumentFilter(JavaUtilities::DocumentSizeFilter.new 150) 
        self.setVisible true
    end
end

JFrames.new
4

1 回答 1

1

您的困惑是superRuby 中的内容:它不是参考,而是关键字。

您需要做的就是调用super,例如:

def replace(fb,  offset, length, text, attrs) 
  puts 'doing replace'
  super
end

super with no args calls the superclass method with the current method's args. You can call with args, e.g., super foo, bar, or with no args (explicitly requires parens) e.g., super().

于 2013-01-03T02:32:43.800 回答