【问题标题】:Jython swing supercall to class "extending" JTextFieldJython swing supercall 到类“扩展”JTextField
【发布时间】:2012-06-01 06:05:09
【问题描述】:

我正在尝试制作一个类似于 the panel here 的自定义 TextField。但是,如果我尝试为某些方法调用 super ,它会进入无限递归,导致递归限制(stackoverflow 从来没有更合适的问题;)),例如paintadd (我试过的这两个方法,我猜它是继承的一切)。

这里是重要的代码摘录:

class inputWithButtons(JLayeredPane):
    def __init__(self):
        self.setLayout(_textFieldWithButtons())

        self._fileField = JTextField()
        self.add(self._fileField, Integer(1))
        self.preferredSize = (0, 40) #TODO: why does minimumSize not work?



    def add(self, component, layer):  #recurses indefinitly
        super(inputWithButtons, self).add(component, layer)
        self.revalidate()

【问题讨论】:

    标签: swing jython


    【解决方案1】:

    如果方法在各自的 java 类中受到保护,则必须使用以下语法(老实说,讨厌这种方法)

    self.super__
    

    例如:

    from javax.swing import JPanel
    
    class panel(JPanel):
        def paintComponent(self, graphic):
            self.super__paintComponent(graphic)
            # Do something
    

    Source

    要调用任何其他超类方法,请使用以下语法:

    SuperClassName.method(self, *args)
    

    new-style classes:

    super(panel, self).method(*args)
    

    【讨论】:

    • 我无法测试这个,因为它的来源超出了我的能力范围,但这听起来是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多