The display is definitely initialized by the time startup() is called, though
your buttons may not be attached to the display if they are not descendants of
an open Window.
Either way, it shouldn't matter - you can still register event listeners even
if a component is not currently part of the display hierarchy. So I suspect
that something else is going on. Can you share any additional source code?
On Nov 23, 2010, at 1:26 PM, Bojan Vučinić wrote:
> I've changed b to Button, but the error changed to
>
> java.lang.IllegalArgumentException: display is null.
>
> as the display is not initialized yet. Namely, I'm doing this during
> startup() to define listeners.
> The method is called once, but as it is called for each button I wanted to
> reduce the number of lines ;-)
> by writing a one-liner for each button, and maybe further on, put all the
> buttons in a collection and iterate over its members.
> It is just reducing the number of lines in code.
>
>
> Greg Brown said the following on 23/11/2010 19:10:
>> I noticed that, in the second example, you are passing an instance of
>> PushButton as b rather than Button. That may be causing the problem, since
>> the buttonPressed() method takes an instance of Button, not PushButton.
>>
>> Also, I'm not sure how you expect to call pressedDo(), but as coded it will
>> add a new event listener every time it is called. Is that the intended
>> behavior?
>>
>>
>> On Nov 23, 2010, at 1:05 PM, Bojan Vučinić wrote:
>>
>>> Hi All,
>>>
>>> If you are using Scala for your code then you are obliged to write
>>> listeners in the following way:
>>>
>>> printButton.getButtonPressListeners.add(new ButtonPressListener {
>>> override def buttonPressed(b: Button) {
>>> print
>>> }
>>> })
>>> I've tried to simplify this by defining the following method:
>>> def pressedDo (aB: PushButton, action: Unit) = {
>>> aB.getButtonPressListeners.add(new ButtonPressListener {
>>> override def buttonPressed(b: PushButton) { action }})
>>> }
>>> and than invoking the method in this way (example)
>>> pressedDo(printButton, print)
>>> however, this results in a compiler error:
>>> error: object creation impossible, since method buttonPressed in trait
>>> ButtonPressListener of type (x$1: org.apache.pivot.wtk.Button)Unit is not
>>> defined
>>> aB.getButtonPressListeners.add(new ButtonPressListener {
>>> I'm not a programming language specialist, and in addition a Scala novice,
>>> but I'm puzzled why putting boilerplate code in a separate method is not
>>> working??
>>>
>>> Best regards,
>>> Bojan
>>>
>>>