From: O'Brien-Strain, E. <eo...@ex...> - 2001-03-27 18:54:06
|
Personally I keep a bookmark on my desktop to the Java API reference at ... http://java.sun.com/j2se/1.3/docs/api/overview-summary.html ... to which I frequently go to answer questions like this. In this case if you go to that page, click on "Index" at the top, click on "E", and scroll down -- you will see that there are "enableEvents" methods in two different classes. Following the links to those two methods should help you figure out which one to use and what to pass as its arguments. __ Eamonn -----Original Message----- From: cindy [mailto:inf...@pi...] [...]For instance, one of the statements in an example reads like this, "enableEvents(AWTEvent.WINDOW_EVENT_MASK)". How would I go about determining which class/package to import and how would I know what qualifiers to us for "enableEvents"? [...] |
From: Brian Z. <bz...@ig...> - 2001-04-03 20:04:53
|
Wayne, You can call "self" on an abstract object, you just can't instantiate an abstract object. An abstract object has all the state and behaviour of a normal, concrete object it just can't live on it's own. It needs to be subclassed and made abstract. For a good example of this, check out the java.io.* packages, in particular, either the Reader/Writer or InputStream/OutputStream classes and their subclasses. Look at FileReader and you'll notice it is an implementation of the abstract Reader class, all FileReader provides to Reader is how to get the initial data, in this case a File. Python really doesn't have the notion of an abstract class, in general an abstract class or interface is implemented by defining a bunch of methods which raise Exceptions. So in your case, you can't instantiate a Component, but you can get subclasses of Component and then call methods on them. hope this helps, brian -----Original Message----- From: jyt...@li... [mailto:jyt...@li...]On Behalf Of cindy Sent: Wednesday, April 04, 2001 3:48 AM To: D-Man Cc: Jyt...@li... Subject: Re: [Jython-users] A big problem for me! D-Man wrote: > class Foo : > def func( self ) : > print "func was called" > > def runme( self ) : > func() # this won't work as you've seen in your code > > def runme2( self ) : > self.func() # this will work as expected This I undertstand, but I don't see how "self" can be used on a class that is inherited and that is abstract, such as Component. When I do "self.enableEvents(java.awt.event.WindowEvent.WINDOW_EVENT_MASK)" I get an AttribueError on enableEvents, which I would expect. Thanks. Wayne _______________________________________________ Jython-users mailing list Jyt...@li... http://lists.sourceforge.net/lists/listinfo/jython-users |
From: D-Man <ds...@ri...> - 2001-04-04 14:31:18
|
( I don't mean to be condescending at all, but I want to make sure this doesn't cause some confusion. ) An object can't be abstract, only classes can. Objects also can't be subclassed, only classes can be subclassed. Also, 'self' hasn't been "called", it was only used to access an attribute. (calling it would look like self() or self( <some arguments here> ) and would require defining the function __call_ ) I think Brian knows this, but mixed a couple of terms around in writing this. Other than the wording issues, everything Brian said is accurate and (hopefully) helpful to you. -D On Tue, Apr 03, 2001 at 03:05:05PM -0500, Brian Zimmer wrote: | | Wayne, | | You can call "self" on an abstract object, you just can't instantiate | an abstract object. An abstract object has all the state and | behaviour of a normal, concrete object it just can't live on it's | own. It needs to be subclassed and made abstract. For a good example | of this, check out the java.io.* packages, in particular, either the | Reader/Writer or InputStream/OutputStream classes and their | subclasses. Look at FileReader and you'll notice it is an | implementation of the abstract Reader class, all FileReader provides | to Reader is how to get the initial data, in this case a File. | | Python really doesn't have the notion of an abstract class, in general | an abstract class or interface is implemented by defining a bunch of | methods which raise Exceptions. | | So in your case, you can't instantiate a Component, but you can get | subclasses of Component and then call methods on them. | | hope this helps, | | brian |
From: Brian Z. <bz...@ig...> - 2001-04-04 15:03:59
|
( I'm perfectly comfortable being corrected when I'm wrong. ) Point well made, I'll be more careful next time ;) D-Man is indeed correct and offered a better explanation of object vs. class than I did. Sorry for any confusion and thanks for the clarification. brian -----Original Message----- From: jyt...@li... [mailto:jyt...@li...]On Behalf Of D-Man Sent: Wednesday, April 04, 2001 9:30 AM To: Jyt...@li... Subject: Re: [Jython-users] A big problem for me! ( I don't mean to be condescending at all, but I want to make sure this doesn't cause some confusion. ) An object can't be abstract, only classes can. Objects also can't be subclassed, only classes can be subclassed. Also, 'self' hasn't been "called", it was only used to access an attribute. =20 (calling it would look like self() or self( <some arguments here> ) and would require defining the function __call_ ) I think Brian knows this, but mixed a couple of terms around in writing this. Other than the wording issues, everything Brian said is accurate and (hopefully) helpful to you. -D On Tue, Apr 03, 2001 at 03:05:05PM -0500, Brian Zimmer wrote: |=20 | Wayne, | =20 | You can call "self" on an abstract object, you just can't instantiate | an abstract object. An abstract object has all the state and | behaviour of a normal, concrete object it just can't live on it's | own. It needs to be subclassed and made abstract. For a good example | of this, check out the java.io.* packages, in particular, either the | Reader/Writer or InputStream/OutputStream classes and their | subclasses. Look at FileReader and you'll notice it is an | implementation of the abstract Reader class, all FileReader provides | to Reader is how to get the initial data, in this case a File. | =20 | Python really doesn't have the notion of an abstract class, in general | an abstract class or interface is implemented by defining a bunch of | methods which raise Exceptions. | =20 | So in your case, you can't instantiate a Component, but you can get | subclasses of Component and then call methods on them. | =20 | hope this helps, | =20 | brian _______________________________________________ Jython-users mailing list Jyt...@li... http://lists.sourceforge.net/lists/listinfo/jython-users |
From: Adam B. <ada...@gb...> - 2001-04-05 00:47:47
|
Er, no. In Java, protected methods are available to subclasses*. Private and "package" (unprefixed methods, eg void myMethod()) level methods and attributes are not. I'd read the Java Tutorial available on the Java website if you don't want to buy a book. If you do want to buy a book I'd recommend Java In A Nutshell. * They are also available within a package, but this is dodgy, I'd stay away from it. Adam Burke > -----Original Message----- > From: cindy [SMTP:inf...@pi...] > Sent: Thursday, April 05, 2001 10:11 PM > To: D-Man > Cc: Jyt...@li... > Subject: Re: [Jython-users] A big problem for me! > > I thought I couldn't access the method enableEvents() by inheriting > JFrame. > The reason being is that this method is protected. I concluded that I have > to > inherit Component to get access to this mrthod. Therefore, the tree > structure > below and inheritance from JFrame wouldn't work for the method > enableEvents(). > Is this correct? > Wayne > > > D-Man wrote: > > > On Wed, Apr 04, 2001 at 11:01:51PM -0400, cindy wrote: > > | > The following code worked for me : > > | > > > | > from java.awt import Component , AWTEvent > > | > > > | > class C( Component ) : > > | > def __init__( self ) : > > | > self.super__enableEvents( AWTEvent.WINDOW_EVENT_MASK ) > > | > > | Ok. So this means that ever time I wanted to use this method, > "enableEvents()" I > > | have to > > | inherit Component. But lets say that I would like to extend some other > > | component, like > > | JFrame. Then if I want to use enableEvents() in the same class that I > want to > > | extend > > | JFrame, I would have to inherit Componet and do a composit on JFrame. > Is this > > | correct? > > > > Not quite. If you look at the top of the documenation for JFrame you > > will see > > > > Class JFrame > > > > java.lang.Object > > | > > +--java.awt.Component > > | > > +--java.awt.Container > > | > > +--java.awt.Window > > | > > +--java.awt.Frame > > | > > +--javax.swing.JFrame > > > > JFrame already inherits from java.awt.Component. The term "is-a" is > > often used with inheritance. A JFrame object is-a Component object. > > If you inherit from JFrame, you are indirectly inheriting from > > Component. > > > > If you look farther down on the documentation page you will see a list > > of "Methods inherited from Frame" and "Methods inherited from Window" > > and ... and "Methods inherited from Component". Since the methods are > > listed there, they exist in objects of the type "JFrame". > > > > FYI, the documentation (for JDK1.2.2) is at > > > > http://java.sun.com/products/jdk/1.2/docs/api/index.html > > > > while the JFrame page is > > > > http://java.sun.com/products/jdk/1.2/docs/api/javax/swing/JFrame.html > > > > -D > > > > _______________________________________________ > > Jython-users mailing list > > Jyt...@li... > > http://lists.sourceforge.net/lists/listinfo/jython-users > > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > http://lists.sourceforge.net/lists/listinfo/jython-users |
From: cindy <inf...@pi...> - 2001-04-05 09:37:33
|
In the jython doc , under Calling Methods in your Superclass", I quote "In Pyhton, if I want to call the foo method in my superclass, I use the following SuperClass.foo(self) This works with the majority of methods, but protected methods can not be called from subclasses in this way. Instead you have to use the "self.super_foo()" call style." I beleave the latter syntax is telling me I have to use inheritance. Am I wrong? Wayne P.S. I have several books in which I'm using to learn java. What I thought I do to learn jython was rewite all the examples in the book in jython. This is how my problen came about. My the way the book is, "Beiginning Java" by Ivor Horton Adam Burke wrote: > Er, no. > > In Java, protected methods are available to subclasses*. Private and > "package" (unprefixed methods, eg void myMethod()) level methods and > attributes are not. > > I'd read the Java Tutorial available on the Java website if you don't want > to buy a book. If you do want to buy a book I'd recommend Java In A > Nutshell. > > * They are also available within a package, but this is dodgy, I'd stay away > from it. > > Adam Burke > > > -----Original Message----- > > From: cindy [SMTP:inf...@pi...] > > Sent: Thursday, April 05, 2001 10:11 PM > > To: D-Man > > Cc: Jyt...@li... > > Subject: Re: [Jython-users] A big problem for me! > > > > I thought I couldn't access the method enableEvents() by inheriting > > JFrame. > > The reason being is that this method is protected. I concluded that I have > > to > > inherit Component to get access to this mrthod. Therefore, the tree > > structure > > below and inheritance from JFrame wouldn't work for the method > > enableEvents(). > > Is this correct? > > Wayne > > > > > > D-Man wrote: > > > > > On Wed, Apr 04, 2001 at 11:01:51PM -0400, cindy wrote: > > > | > The following code worked for me : > > > | > > > > | > from java.awt import Component , AWTEvent > > > | > > > > | > class C( Component ) : > > > | > def __init__( self ) : > > > | > self.super__enableEvents( AWTEvent.WINDOW_EVENT_MASK ) > > > | > > > | Ok. So this means that ever time I wanted to use this method, > > "enableEvents()" I > > > | have to > > > | inherit Component. But lets say that I would like to extend some other > > > | component, like > > > | JFrame. Then if I want to use enableEvents() in the same class that I > > want to > > > | extend > > > | JFrame, I would have to inherit Componet and do a composit on JFrame. > > Is this > > > | correct? > > > > > > Not quite. If you look at the top of the documenation for JFrame you > > > will see > > > > > > Class JFrame > > > > > > java.lang.Object > > > | > > > +--java.awt.Component > > > | > > > +--java.awt.Container > > > | > > > +--java.awt.Window > > > | > > > +--java.awt.Frame > > > | > > > +--javax.swing.JFrame > > > > > > JFrame already inherits from java.awt.Component. The term "is-a" is > > > often used with inheritance. A JFrame object is-a Component object. > > > If you inherit from JFrame, you are indirectly inheriting from > > > Component. > > > > > > If you look farther down on the documentation page you will see a list > > > of "Methods inherited from Frame" and "Methods inherited from Window" > > > and ... and "Methods inherited from Component". Since the methods are > > > listed there, they exist in objects of the type "JFrame". > > > > > > FYI, the documentation (for JDK1.2.2) is at > > > > > > http://java.sun.com/products/jdk/1.2/docs/api/index.html > > > > > > while the JFrame page is > > > > > > http://java.sun.com/products/jdk/1.2/docs/api/javax/swing/JFrame.html > > > > > > -D > > > > > > _______________________________________________ > > > Jython-users mailing list > > > Jyt...@li... > > > http://lists.sourceforge.net/lists/listinfo/jython-users > > > > > > _______________________________________________ > > Jython-users mailing list > > Jyt...@li... > > http://lists.sourceforge.net/lists/listinfo/jython-users > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > http://lists.sourceforge.net/lists/listinfo/jython-users |
From: D-Man <ds...@ri...> - 2001-04-05 14:48:01
|
On Thu, Apr 05, 2001 at 05:41:05PM -0400, cindy wrote: | In the jython doc , under Calling Methods in your Superclass", I quote | "In Python, if I want to call the foo method in my superclass, I use the | following | | SuperClass.foo(self) | | This works with the majority of methods, but protected methods can not | be called from subclasses in this way. Instead you have to use the | "self.super_foo()" call style." I beleave the latter syntax is telling me | I have to use inheritance. Am I wrong? Both syntaxes use inheritance. | Wayne | | P.S. I have several books in which I'm using to learn java. What I thought | I do to learn jython was rewite all the examples in the book in jython. This | is how my problen came about. My the way the book is, "Beiginning Java" | by Ivor Horton The problem you are seeing here comes from mixing Python and Java semantics and syntax together without first understanding either of them. In Python, all functions are "public", and to call an overridden method in a superclass you use the SuperClass.function( self ) syntax ('SuperClass' isn't a keyword). In Java it is simply super.function() ('super' is a keyword). Also, java has "public" "protected" and "private" attributes which complicates the Python<->Java bridging. I would highly recommend that you learn one language first, then the other language, then put them together. The combined semantics make much more sense when you understand each language's semantics. IMO Python is much simpler and easier to learn (while being more powerful at a high level) than Java, so I would recommend learning python first. The tutor list is great at helping new people learn the basics of programming in a python environment (tu...@py...). Once you know python or java fairly well the hoops jython jumps through to provide as simple and clean as possible bridge between the two makes much more sense and is easier to grasp. -D |
From: Samuele P. <pe...@in...> - 2001-04-05 12:07:12
|
Here's a clarifying example (I hope): <A.java> public class A { protected void prot1() { System.out.println("java prot1"); } protected void prot2() { System.out.println("java prot2"); } public static void invoke_prot2(A a) { a.prot2(); } } </A.java> <ex.py> import A class Apy(A): def invoke_prot1(self): self.prot1() # note: self.super__prot1() won't work because prot1 is not overriden def invoke_super_prot2(self): self.super__prot2() def prot2(self): print "Apy prot2" print "-- Apy --" print dir(Apy) # notice that there's no super__prot1 a=Apy() a.invoke_prot1() a.invoke_super_prot2() a.prot2() A.invoke_prot2(a) </ex.py> You can just try it. regards. |
From: cindy <inf...@pi...> - 2001-04-05 14:22:38
|
Thanks Samuele, I tried your example and study it and it works and I beleave I understand what it does. I guess I'm not making myself clear. I just want to find away of not having to inherit Component to use enableEvents() method. Its obvious that I'm making some people upset. So I'll it let go. Thanks all for being patient. Wayne Samuele Pedroni wrote: > Here's a clarifying example (I hope): > > <A.java> > public class A { > > protected void prot1() { > System.out.println("java prot1"); > > } > > protected void prot2() { > System.out.println("java prot2"); > } > > public static void invoke_prot2(A a) { > a.prot2(); > } > > } > </A.java> > > <ex.py> > > import A > > class Apy(A): > def invoke_prot1(self): > self.prot1() > # note: self.super__prot1() won't work because prot1 is not overriden > > def invoke_super_prot2(self): > self.super__prot2() > > def prot2(self): > print "Apy prot2" > > print "-- Apy --" > print dir(Apy) # notice that there's no super__prot1 > > a=Apy() > a.invoke_prot1() > a.invoke_super_prot2() > a.prot2() > A.invoke_prot2(a) > > </ex.py> > > You can just try it. > > regards. > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > http://lists.sourceforge.net/lists/listinfo/jython-users |
From: D-Man <ds...@ri...> - 2001-04-05 14:41:27
|
On Thu, Apr 05, 2001 at 10:26:14PM -0400, cindy wrote: | I guess I'm not making myself clear. I just want to find away | of not having to inherit Component to use enableEvents() method. You can't. That is what 'protected' means. (actually ... jython has the option to ignore java accessability modifiers, but that's different issue altogether and there is no need to make things extra complicated now). Umm, also, java allows other classes in the package to access it but that is a bad part of java's design. Don't go there. (for really cool access modifier semantics, check out Eiffel, but don't overload yourself with too many languages at once) | Its obvious that I'm making some people upset. So I'll it let go. | Thanks all for being patient. No problem. If you want to learn more python, try the tutor list (tu...@py...). -D |
From: cindy <inf...@pi...> - 2001-03-28 10:36:54
|
Thanks for your reply, I also made it a bookmark. I went to the site and track down enableEvents() and found that it was a method of Component. So I imported java.awt.Component and then qualified enableEvents with java.awt.Component. I get an error tell me that enableEvents() is not an attribute of Component. So I checked my spelling ant thing look ok. Can someone tell me what I doing wrong? Thanks. Wayne "O'Brien-Strain, Eamonn" wrote: > Personally I keep a bookmark on my desktop to the Java API reference at ... > > http://java.sun.com/j2se/1.3/docs/api/overview-summary.html > > ... to which I frequently go to answer questions like this. > > In this case if you go to that page, click on "Index" at the top, click on > "E", and scroll down -- you will see that there are "enableEvents" methods > in two different classes. Following the links to those two methods should > help you figure out which one to use and what to pass as its arguments. > > __ > Eamonn > > -----Original Message----- > From: cindy [mailto:inf...@pi...] > [...]For instance, > one of the statements in an example reads like this, > "enableEvents(AWTEvent.WINDOW_EVENT_MASK)". > How would I go about determining which class/package to > import and how would I know what qualifiers to us for > "enableEvents"? > [...] > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > http://lists.sourceforge.net/lists/listinfo/jython-users |
From: D-Man <ds...@ri...> - 2001-03-28 15:57:03
|
In Java everything is coded as part of a class. As an example class take this : public class Foo { public void func1( ) { System.out.println( "Hello from func1" ) ; } static public void func2( ) { System.out.println( "Hello from func1" ) ; } } This class contains 2 methods, func1 and func2. func2 is declared as static. That means that the following (Java) code is legal : Foo.func2() ; Foo f = new Foo() ; f.func2() f.func1() while the following is illegal : Foo.func1() ; The reason is that only "static" members belong to the _class_, all others belong to _instances_ of the class. In order to call the method you must first have an instance of java.awt.Component and call it on the instance. Note also that it will only affect the instance you call it on, not all instances of the class. Python's classes don't have any "static" members because Python doesn't force you to write everything inside of a class construct. Instead put "static" functions in the module. (If you are trying to use a mix of Java and Python then the java code is unable to access module level stuff unless it goes through the interpreter directly) -D On Wed, Mar 28, 2001 at 06:37:53PM -0500, cindy wrote: | Thanks for your reply, I also made it a bookmark. | I went to the site and track down enableEvents() and | found that it was a method of Component. So I imported | java.awt.Component and then qualified enableEvents with | java.awt.Component. I get an error tell me that enableEvents() | is not an attribute of Component. So I checked my spelling | ant thing look ok. Can someone tell me what I doing wrong? | Thanks. | Wayne |
From: cindy <inf...@pi...> - 2001-04-03 13:17:52
|
Hi again, If I may reiterate what you said to help me understand.If module Foo.py has the statement "enableEvents(AWTEvent.WINDOW_EVENT_MASK)" and module Bar.py does a composite on module Foo.py, then I have to pass the instance name to module Foo.py to qualify the method enableEvents() thus "instanceName.enableEvents(). If this is so how do I pass the instance name in the creation of the instance? If I have the statement in Bar.py "self.myInstance = Foo(). Thanks. Wayne D-Man wrote: > In Java everything is coded as part of a class. As an example class > take this : > > public class Foo > { > public void func1( ) > { > System.out.println( "Hello from func1" ) ; > } > > static public void func2( ) > { > System.out.println( "Hello from func1" ) ; > } > } > > This class contains 2 methods, func1 and func2. func2 is declared as > static. That means that the following (Java) code is legal : > > Foo.func2() ; > Foo f = new Foo() ; > f.func2() > f.func1() > > while the following is illegal : > > Foo.func1() ; > > The reason is that only "static" members belong to the _class_, all > others belong to _instances_ of the class. In order to call the > method you must first have an instance of java.awt.Component and call > it on the instance. Note also that it will only affect the instance > you call it on, not all instances of the class. > > Python's classes don't have any "static" members because Python > doesn't force you to write everything inside of a class construct. > Instead put "static" functions in the module. (If you are trying to > use a mix of Java and Python then the java code is unable to access > module level stuff unless it goes through the interpreter directly) > > -D |
From: D-Man <ds...@ri...> - 2001-04-03 14:29:07
|
On Tue, Apr 03, 2001 at 10:21:29PM -0400, cindy wrote: | Hi again, | If I may reiterate what you said to help me understand.If module Foo.py | has the statement "enableEvents(AWTEvent.WINDOW_EVENT_MASK)" and | module Bar.py does a composite on module Foo.py, then I have to pass | the instance name to module Foo.py to qualify the method enableEvents() | thus | "instanceName.enableEvents(). If this is so how do I pass the instance | name | in the creation of the instance? If I have the statement in Bar.py | "self.myInstance = Foo(). | Thanks. | Wayne I'm not sure if I completely understand your goals and your design. Also, I think you mixed up modules and classes in your description above. I just read the docs for java.awt.Component.enableEvents( long ) and noticed the following : This method only needs to be invoked by subclasses of Component which desire to have the specified event types delivered to processEvent regardless of whether or not a listener is registered. Are you trying to create a subclass of Component that needs to receive events even if no listeners are registered? Could you post some code showing what it is you are currently trying to do? If you have a class Foo that inherits from component, you could do something like the following, but I'm not sure if it is what you are looking for. ---- in some .py file ------ import java class Foo( java.awt.Component ) : def __init__( self ) : # note that 'self' now refers the the instance of 'Foo' and # therefore is-a instance of 'Component' self.enableEvents( java.awt.AWTEvent.WINDOW_EVENT_MASK ) def processEvent( self , event ) : """ @sig protected void processEvent( java.awt.AWTEvent event ) this method must be defined or you will end up with errors when the event dispatcher tries to call it """ print "Found an event!" print event HTH, -D |
From: cindy <inf...@pi...> - 2001-04-03 17:10:58
|
The code is not exactly the same as the book. In Sketcher.py I have- import java from SketchFrame import * class Sketcher: def __init__(self): true = 1 title = 'sketcher' self.aSketchFrame = SketchFrame(title) self.theKit = self.aSkechFrame.getToolkit() self.wndSize = setBounds(self.wndSize.width/4, self.wndSize.height/4, self.wndSize.width/2, self.wndSize.height/2) self.aSketchFrame.setVisible(true) if __name__ == '__maine__' aSketcher = Sketcher() Here is the code for SketchFrame. from javax import swing import java import java.awt.event class SketchFrame(swing.JFrame): def __init__(self, title): // some code left out - it build a menu bar enableEvents(java.awt.event.WindowEvent.WINDOW_EVENT_MASK) def processWindowEvent(self, event): if (event.getID() == java.awt.event.WindowEvent.WINDOW.CLOSE): java.awt.event.dispose() # not sure if this works yet. I haven't gotten to this point. java.awt.System.exit(0) swing.JFrame.super.processWindowEvent(event) > On Tue, Apr 03, 2001 at 10:21:29PM -0400, cindy wrote: > | Hi again, > | If I may reiterate what you said to help me understand.If module Foo.py > | has the statement "enableEvents(AWTEvent.WINDOW_EVENT_MASK)" and > | module Bar.py does a composite on module Foo.py, then I have to pass > | the instance name to module Foo.py to qualify the method enableEvents() > | thus > | "instanceName.enableEvents(). If this is so how do I pass the instance > | name > | in the creation of the instance? If I have the statement in Bar.py > | "self.myInstance = Foo(). > | Thanks. > | Wayne > > I'm not sure if I completely understand your goals and your design. > Also, I think you mixed up modules and classes in your description > above. > > I just read the docs for java.awt.Component.enableEvents( long ) and > noticed the following : > > This method only needs to be invoked by subclasses of > Component which desire to have the specified event types > delivered to processEvent regardless of whether or not a > listener is registered. > > Are you trying to create a subclass of Component that needs to receive > events even if no listeners are registered? Could you post some code > showing what it is you are currently trying to do? > > If you have a class Foo that inherits from component, you could do > something like the following, but I'm not sure if it is what you are > looking for. > > ---- in some .py file ------ > import java > > class Foo( java.awt.Component ) : > def __init__( self ) : > # note that 'self' now refers the the instance of 'Foo' and > # therefore is-a instance of 'Component' > self.enableEvents( java.awt.AWTEvent.WINDOW_EVENT_MASK ) > > def processEvent( self , event ) : > """ > @sig protected void processEvent( java.awt.AWTEvent event ) > > this method must be defined or you will end up with errors > when the event dispatcher tries to call it > """ > > print "Found an event!" > print event > > HTH, > -D > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > http://lists.sourceforge.net/lists/listinfo/jython-users |
From: D-Man <ds...@ri...> - 2001-04-03 18:19:04
|
The change you need to make is shown below. In Java, C++ and Eiffel, member functions can be called on the current object without specifying the object. In Python, however, the object (usually named 'self' but called 'this' in Java and C++, 'current' in Eiffel) must be explicitly named. The following 2 runme functions in java code are equivalent, and serve the same purpose as the python function following it. public class Foo { public void func( ) { System.out.println( "func was called" ) ; } public void runme( ) { func() ; } public void runme2( ) { this.func() ; } } class Foo : def func( self ) : print "func was called" def runme( self ) : func() # this won't work as you've seen in your code def runme2( self ) : self.func() # this will work as expected Conclusion : As you read through sample Java code, prepend "this" (for java) or "self" (for python) to each method call on the current object. IMO explicit is better than implicit so I use 'this' in all my Java code where it won't be illegal (ie nested event handler classes) HTH, -D On Wed, Apr 04, 2001 at 02:14:38AM -0400, cindy wrote: | Here is the code for SketchFrame. | | from javax import swing | import java | import java.awt.event | | class SketchFrame(swing.JFrame): | def __init__(self, title): | // some code left out - it build a menu bar | enableEvents(java.awt.event.WindowEvent.WINDOW_EVENT_MASK) self.enableEvents(java.awt.event.WindowEvent.WINDOW_EVENT_MASK) ^^^^^ | | def processWindowEvent(self, event): | if (event.getID() == java.awt.event.WindowEvent.WINDOW.CLOSE): | java.awt.event.dispose() # not sure if this works | yet. I haven't gotten to this point. | java.awt.System.exit(0) | swing.JFrame.super.processWindowEvent(event) | |
From: D-Man <ds...@ri...> - 2001-04-03 19:40:36
|
On Wed, Apr 04, 2001 at 04:24:21AM -0400, cindy wrote: | > | > class Foo : | > def func( self ) : | > print "func was called" | > | > def runme( self ) : | > func() # this won't work as you've seen in your code | > | > def runme2( self ) : | > self.func() # this will work as expected | | This I undertstand, but I don't see how "self" can be used on a | class that is inherited and that is abstract, such as Component. | When I do "self.enableEvents(java.awt.event.WindowEvent.WINDOW_EVENT_MASK)" | I get an AttribueError on enableEvents, which I would expect. | Thanks. | Wayne I see the problem now. The problem lies in enableEvents being protected, and Jython's name mangling of it. First I'll explain a little bit about inheritance, but I'll keep everything 'public' (like in Python). If I make a class, class P : def p_func( self ) : pass and a child class class C( P ) : pass then try this child_object = C() dir( child_object ) I will see p_func as a member of child_object. This is because it is inherited. If the parent class is 'abstract' that only means you can't use 'new' on it. It has no effect on inheritance. So with that knowledge, a class that inherits from java.awt.Component should have a member 'enableEvents'. The problem here is it is 'protected'. In Java that means that only subclasses and classes in the same package can access the function. Other classes can't call it. Apparently jython does some name mangling on protected members by prefixing "super__" to it. (I certainly hope it is mentioned in the documentation, but like a <ahem> genius^H^H^H^H^H^Hidiot I haven't checked ;-)) The following code worked for me : from java.awt import Component , AWTEvent class C( Component ) : def __init__( self ) : self.super__enableEvents( AWTEvent.WINDOW_EVENT_MASK ) I hope this clears up some confusion! As always ask again if you have any more problems. -D |
From: cindy <inf...@pi...> - 2001-04-03 20:12:50
|
Thanks for your time! I went the jython site and found the documentation. the documentation has more meaning for me now, now that I had the problem. Wayne > prefixing "super__" to it. (I certainly hope it is mentioned in the > documentation, but like a <ahem> genius^H^H^H^H^H^Hidiot I haven't > checked ;-)) > |
From: <bc...@wo...> - 2001-04-04 10:41:00
|
[D-Man] >So with that knowledge, a class that inherits from java.awt.Component >should have a member 'enableEvents'. The problem here is it is >'protected'. In Java that means that only subclasses and classes in >the same package can access the function. Other classes can't call >it. Apparently jython does some name mangling on protected members by >prefixing "super__" to it. (I certainly hope it is mentioned in the >documentation, but like a <ahem> genius^H^H^H^H^H^Hidiot I haven't >checked ;-)) It is mentioned in the section "Calling Methods in Your Superclass" http://www.jython.org/docs/subclassing.html regards, finn |
From: cindy <inf...@pi...> - 2001-04-04 14:58:21
|
> The following code worked for me : > > from java.awt import Component , AWTEvent > > class C( Component ) : > def __init__( self ) : > self.super__enableEvents( AWTEvent.WINDOW_EVENT_MASK ) Ok. So this means that ever time I wanted to use this method, "enableEvents()" I have to inherit Component. But lets say that I would like to extend some other component, like JFrame. Then if I want to use enableEvents() in the same class that I want to extend JFrame, I would have to inherit Componet and do a composit on JFrame. Is this correct? Thanks. Wayne |
From: D-Man <ds...@ri...> - 2001-04-04 15:06:11
|
On Wed, Apr 04, 2001 at 11:01:51PM -0400, cindy wrote: | > The following code worked for me : | > | > from java.awt import Component , AWTEvent | > | > class C( Component ) : | > def __init__( self ) : | > self.super__enableEvents( AWTEvent.WINDOW_EVENT_MASK ) | | Ok. So this means that ever time I wanted to use this method, "enableEvents()" I | have to | inherit Component. But lets say that I would like to extend some other | component, like | JFrame. Then if I want to use enableEvents() in the same class that I want to | extend | JFrame, I would have to inherit Componet and do a composit on JFrame. Is this | correct? Not quite. If you look at the top of the documenation for JFrame you will see Class JFrame java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--java.awt.Window | +--java.awt.Frame | +--javax.swing.JFrame JFrame already inherits from java.awt.Component. The term "is-a" is often used with inheritance. A JFrame object is-a Component object. If you inherit from JFrame, you are indirectly inheriting from Component. If you look farther down on the documentation page you will see a list of "Methods inherited from Frame" and "Methods inherited from Window" and ... and "Methods inherited from Component". Since the methods are listed there, they exist in objects of the type "JFrame". FYI, the documentation (for JDK1.2.2) is at http://java.sun.com/products/jdk/1.2/docs/api/index.html while the JFrame page is http://java.sun.com/products/jdk/1.2/docs/api/javax/swing/JFrame.html -D |
From: cindy <inf...@pi...> - 2001-04-05 00:07:18
|
I thought I couldn't access the method enableEvents() by inheriting JFrame. The reason being is that this method is protected. I concluded that I have to inherit Component to get access to this mrthod. Therefore, the tree structure below and inheritance from JFrame wouldn't work for the method enableEvents(). Is this correct? Wayne D-Man wrote: > On Wed, Apr 04, 2001 at 11:01:51PM -0400, cindy wrote: > | > The following code worked for me : > | > > | > from java.awt import Component , AWTEvent > | > > | > class C( Component ) : > | > def __init__( self ) : > | > self.super__enableEvents( AWTEvent.WINDOW_EVENT_MASK ) > | > | Ok. So this means that ever time I wanted to use this method, "enableEvents()" I > | have to > | inherit Component. But lets say that I would like to extend some other > | component, like > | JFrame. Then if I want to use enableEvents() in the same class that I want to > | extend > | JFrame, I would have to inherit Componet and do a composit on JFrame. Is this > | correct? > > Not quite. If you look at the top of the documenation for JFrame you > will see > > Class JFrame > > java.lang.Object > | > +--java.awt.Component > | > +--java.awt.Container > | > +--java.awt.Window > | > +--java.awt.Frame > | > +--javax.swing.JFrame > > JFrame already inherits from java.awt.Component. The term "is-a" is > often used with inheritance. A JFrame object is-a Component object. > If you inherit from JFrame, you are indirectly inheriting from > Component. > > If you look farther down on the documentation page you will see a list > of "Methods inherited from Frame" and "Methods inherited from Window" > and ... and "Methods inherited from Component". Since the methods are > listed there, they exist in objects of the type "JFrame". > > FYI, the documentation (for JDK1.2.2) is at > > http://java.sun.com/products/jdk/1.2/docs/api/index.html > > while the JFrame page is > > http://java.sun.com/products/jdk/1.2/docs/api/javax/swing/JFrame.html > > -D > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > http://lists.sourceforge.net/lists/listinfo/jython-users |
From: Samuele P. <pe...@in...> - 2001-04-05 08:59:24
|
Hi. cindy wrote: > > I thought I couldn't access the method enableEvents() by inheriting JFrame. > The reason being is that this method is protected. I concluded that I have to > inherit Component to get access to this mrthod. Therefore, the tree structure > below and inheritance from JFrame wouldn't work for the method enableEvents(). > Is this correct? > Wayne > > D-Man wrote: You seem quite confused. You really need to go through some reference material about java, asking about every bit of java/jython semantic here is painful and not really efficient for you... regards. |
From: D-Man <ds...@ri...> - 2001-04-05 14:36:00
|
On Thu, Apr 05, 2001 at 08:10:50AM -0400, cindy wrote: | I thought I couldn't access the method enableEvents() by inheriting JFrame. | The reason being is that this method is protected. I concluded that I have to | inherit Component to get access to this mrthod. Therefore, the tree structure | below and inheritance from JFrame wouldn't work for the method enableEvents(). | | Is this correct? Mostly. 'protected' (in Java, it is slightly different in C++) means that only subclasses and classes in the same package can access it. JFrame is a subclass of Component, and your class is a subclass of JFrame, therefore your class is a subclass of Component. You are correct up to the point where you say "inheritance from JFrame wouldn't work". If you've done some work in discrete math or logic this is basically the following axiom : if A -> B and B -> C then A -> C Here is an example : >>> import javax >>> import java >>> class MyFrame( javax.swing.JFrame ) : ... def __init__( self ) : ... self.super__enableEvents( java.awt.AWTEvent.WINDOW_EVENT_MASK ) ... def processEvent( self , event ) : ... print "got an event" ... >>> aframe = MyFrame() >>> aframe.getContentPane().add( javax.swing.JLabel( "Jython is cool" ) ) javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=null,border=,flags =0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizonta lAlignment=,horizontalTextPosition=,iconTextGap=4,labelFor=,text=Jython is cool, verticalAlignment=CENTER,verticalTextPosition=CENTER] >>> aframe.show() got an event >>> got an event got an event This was an interactive interpreter session of mine. As you can see here, I didn't define getContentPane or setVisible, but they worked. This is because MyFrame is-a JFrame (is-a JComponent ... is-a Component ...). Through inheritance, instances of MyFrame ('aframe') have all of those public and protected members (functions and data). Also, at the end there you can see that processEvent was called when the frame was shown, when I gave it the focus (with the mouse) and when I removed the focus (I clicked in the terminal window to copy the text from). Perhaps the following tutorial sections may help you? http://python.org/doc/current/tut/node11.html http://www.crosswinds.net/~agauld/tutclass.htm HTH, -D |
From: cindy <inf...@pi...> - 2001-04-05 15:03:43
|
Thanks, Thanks, and Thanks. I notice in the example below that your inheritance was different than mine. I did "from java.awt import swing" I changed it to "import javax" and modified my class statement to look like D- Man's example. Bingo, it works. Wayne D-Man wrote: > On Thu, Apr 05, 2001 at 08:10:50AM -0400, cindy wrote: > | I thought I couldn't access the method enableEvents() by inheriting JFrame. > | The reason being is that this method is protected. I concluded that I have to > | inherit Component to get access to this mrthod. Therefore, the tree structure > | below and inheritance from JFrame wouldn't work for the method enableEvents(). > | > | Is this correct? > > Mostly. 'protected' (in Java, it is slightly different in C++) means > that only subclasses and classes in the same package can access it. > JFrame is a subclass of Component, and your class is a subclass of > JFrame, therefore your class is a subclass of Component. You are > correct up to the point where you say "inheritance from JFrame > wouldn't work". > > If you've done some work in discrete math or logic this is basically > the following axiom : > > if A -> B and B -> C then A -> C > > Here is an example : > > >>> import javax > >>> import java > >>> class MyFrame( javax.swing.JFrame ) : > ... def __init__( self ) : > ... self.super__enableEvents( java.awt.AWTEvent.WINDOW_EVENT_MASK ) > ... def processEvent( self , event ) : > ... print "got an event" > ... > >>> aframe = MyFrame() > >>> aframe.getContentPane().add( javax.swing.JLabel( "Jython is cool" ) ) > javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=null,border=,flags > =0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizonta > lAlignment=,horizontalTextPosition=,iconTextGap=4,labelFor=,text=Jython is cool, > verticalAlignment=CENTER,verticalTextPosition=CENTER] > >>> aframe.show() > got an event > >>> got an event > got an event > > This was an interactive interpreter session of mine. As you can see > here, I didn't define getContentPane or setVisible, but they worked. > This is because MyFrame is-a JFrame (is-a JComponent ... is-a > Component ...). Through inheritance, instances of MyFrame ('aframe') > have all of those public and protected members (functions and data). > Also, at the end there you can see that processEvent was called when > the frame was shown, when I gave it the focus (with the mouse) and > when I removed the focus (I clicked in the terminal window to copy the > text from). > > Perhaps the following tutorial sections may help you? > > http://python.org/doc/current/tut/node11.html > > http://www.crosswinds.net/~agauld/tutclass.htm > > HTH, > -D > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > http://lists.sourceforge.net/lists/listinfo/jython-users |