Редактирование: Java Gnome FAQ Events

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
 +
In this part of the Java Gnome programming tutorial, we will talk about events.
 +
__TOC__
 +
 +
Java Gnome library is an event driven system. All GUI applications are event driven.
 +
The applications start a main loop, which continuously checks for newly generated events. If there is no event, the application waits and does nothing.
 +
 +
== Simple event example ==
 +
 +
The next example shows, how we react to two basic events.
 +
 +
<source lang="java">
 +
package com.zetcode;
 +
 +
import org.gnome.gdk.Event;
 +
import org.gnome.gtk.Button;
 +
import org.gnome.gtk.Fixed;
 +
import org.gnome.gtk.Gtk;
 +
import org.gnome.gtk.Widget;
 +
import org.gnome.gtk.Window;
 +
import org.gnome.gtk.WindowPosition;
 +
 +
/**
 +
* Java Gnome tutorial
 +
*
 +
* This program demonstrates two
 +
* basic events.
 +
*
 +
* @author jan bodnar
 +
* website zetcode.com
 +
* last modified March 2009
 +
*/
 +
 +
public class GButton extends Window  {
 +
 +
    public GButton() {
 +
   
 +
        setTitle("Button");
 +
   
 +
        initUI();
 +
 +
        setPosition(WindowPosition.CENTER);
 +
        showAll();
 +
    }
 +
   
 +
    public void initUI() {
 +
   
 +
        connect(new Window.DeleteEvent() {
 +
            public boolean onDeleteEvent(Widget source, Event event) {
 +
                Gtk.mainQuit();
 +
                return false;
 +
            }
 +
        });
 +
   
 +
        Fixed fixed = new Fixed();
 +
       
 +
        Button quit = new Button("Quit");
 +
        quit.connect(new Button.Clicked() {
 +
 +
            public void onClicked(Button button) {
 +
                Gtk.mainQuit();
 +
            }
 +
        });
 +
 +
        quit.setSizeRequest(80, 35);
 +
        fixed.put(quit, 50, 50);
 +
        add(fixed);       
 +
       
 +
        setSizeRequest(250, 200);
 +
    }
 +
   
 +
    public static void main(String[] args) {
 +
 +
        Gtk.init(args);
 +
        new GButton();
 +
        Gtk.main();
 +
    }
 +
}
 +
</source>
 +
 +
In our code example, we react to two events. Delete event and click event.
 +
The delete event is triggered, when we close the window. By default, the window is destroyed but the application does not quit. We must explicitely quit the program.
 +
 +
<source lang="java">
 +
connect(new Window.DeleteEvent() {
 +
    public boolean onDeleteEvent(Widget source, Event event) {
 +
        Gtk.mainQuit();
 +
        return false;
 +
    }
 +
});
 +
 +
</source>
 +
 +
If we click on the close button of the window, the window is destroyed.
 +
But the application is not fully destroyed. We must call the <b>Gtk.mainQuit()</b> to end the application.
 +
We use the <b>connect()</b> method to connect a callback method to a specific event type. In our case it is the <b>DeleteEvent</b>.
 +
 +
<source lang="java">
 +
  quit.connect(new Button.Clicked() {
 +
      public void onClicked(Button button) {
 +
          Gtk.mainQuit();
 +
      }
 +
  });
 +
 +
</source>
 +
 +
When we click on the button widget, the <b>onClicked()</b> method is triggered. We quit the application in reaction to the button click.
 +
 +
== Moving window ==
 +
 +
The next example shows, how we react to move events of a window.
 +
We show the current position of the upper left corner of the window  in the titlebar.
 +
 +
<source lang="java">
 +
package com.zetcode;
 +
 +
import org.gnome.gdk.Event;
 +
import org.gnome.gdk.EventConfigure;
 +
import org.gnome.gtk.Gtk;
 +
import org.gnome.gtk.Widget;
 +
import org.gnome.gtk.Window;
 +
import org.gnome.gtk.WindowPosition;
 +
 +
/**
 +
* ZetCode Java Gnome tutorial
 +
*
 +
* This program demonstrates the
 +
* configure event.
 +
*
 +
* @author jan bodnar
 +
* website zetcode.com
 +
* last modified March 2009
 +
*/
 +
 +
public class GMoveWindow extends Window
 +
        implements Window.ConfigureEvent {
 +
 +
 +
    public GMoveWindow()  {
 +
 +
               
 +
        connect(new Window.DeleteEvent() {
 +
            public boolean onDeleteEvent(Widget source, Event event) {
 +
                Gtk.mainQuit();
 +
                return false;
 +
            }
 +
        });
 +
 +
        connect(this);
 +
       
 +
        setPosition(WindowPosition.CENTER);
 +
       
 +
        setTitle("");
 +
        resize(250, 200);
 +
        showAll();
 +
    }
 +
   
 +
    public boolean onConfigureEvent(Widget widget,
 +
        EventConfigure eventConfigure) {
 +
                                   
 +
        int x = eventConfigure.getX();
 +
        int y = eventConfigure.getY();
 +
       
 +
        setTitle(x + ", " + y);
 +
        return false;
 +
    }
 +
   
 +
    public static void main(String[] args) {
 +
        Gtk.init(args);
 +
        new GMoveWindow();
 +
        Gtk.main();
 +
    }
 +
}
 +
</source>
 +
 +
Resizing and moving windows end up in <b>ConfigureEvent</b> being created.
 +
 +
<source lang="java">
 +
public boolean onConfigureEvent(Widget widget,
 +
    EventConfigure eventConfigure) {
 +
                                   
 +
    int x = eventConfigure.getX();
 +
    int y = eventConfigure.getY();
 +
       
 +
    setTitle(x + ", " + y);
 +
    return false;
 +
}
 +
</source>
 +
 +
We set the x, y coordinates of the window to the titlebar of the window.
 +
 +
[[image: Java_Gnome_faq_move.png| center]]
 +
 +
== EnterNotifyEvent ==
 +
 +
<b>EnterNotifyEvent</b> is emitted, when we enter the area of a widget with a mouse pointer.
 +
 +
<source lang="java">
 +
package com.zetcode;
 +
 +
import org.gnome.gdk.Color;
 +
import org.gnome.gdk.Event;
 +
import org.gnome.gdk.EventCrossing;
 +
import org.gnome.gtk.Button;
 +
import org.gnome.gtk.Fixed;
 +
import org.gnome.gtk.Gtk;
 +
import org.gnome.gtk.StateType;
 +
import org.gnome.gtk.Widget;
 +
import org.gnome.gtk.Window;
 +
import org.gnome.gtk.WindowPosition;
 +
 +
/**
 +
* ZetCode Java Gnome tutorial
 +
*
 +
* This program demonstrates the
 +
* EnterNotifyEvent.
 +
*
 +
* @author jan bodnar
 +
* website zetcode.com
 +
* last modified March 2009
 +
*/
 +
 +
public class GEnterNotifyEvent extends Window {
 +
 +
    private Color lightGray = new Color(55000, 55000, 55000);
 +
 +
 +
    public GEnterNotifyEvent() {
 +
   
 +
        setTitle("EnterNotifyEvent");
 +
       
 +
        initUI();
 +
       
 +
        connect(new Window.DeleteEvent() {
 +
            public boolean onDeleteEvent(Widget source, Event event) {
 +
                Gtk.mainQuit();
 +
                return false;
 +
            }
 +
        });
 +
   
 +
        setDefaultSize(250, 150);
 +
        setPosition(WindowPosition.CENTER);
 +
        showAll();
 +
    }
 +
   
 +
   
 +
   
 +
    public void initUI() {
 +
   
 +
        Button button = new Button("Button");
 +
        button.setSizeRequest(80, 30);
 +
       
 +
        button.connect(new Button.EnterNotifyEvent() {
 +
            public boolean onEnterNotifyEvent(Widget widget,
 +
                        EventCrossing eventCrossing) {
 +
 +
                widget.modifyBackground(StateType.PRELIGHT, lightGray);
 +
       
 +
                return false;
 +
            }
 +
        });
 +
 +
        Fixed fix = new Fixed();
 +
        fix.put(button, 20, 20);
 +
        add(fix);
 +
    }
 +
   
 +
    public static void main(String[] args) {
 +
        Gtk.init(args);
 +
        new GEnterNotifyEvent();
 +
        Gtk.main();
 +
    }
 +
}
 +
</source>
 +
 +
We will change the background color of the button widget, once we hover a mouse pointer over it.
 +
 +
<source lang="java">
 +
 +
  button.connect(new Button.EnterNotifyEvent() {
 +
      public boolean onEnterNotifyEvent(Widget widget,
 +
          EventCrossing eventCrossing) {
 +
          widget.modifyBackground(StateType.PRELIGHT, lightGray);
 +
          return false;
 +
      }
 +
  });
 +
</source>
 +
 +
Here we react to the <b>EnterNotifyEvent</b>.
 +
 +
<source lang="java">
 +
widget.modifyBackground(StateType.PRELIGHT, lightGray);
 +
</source>
 +
 +
We modify the color of the button's background.
 +
 +
This chapter was about events in Java Gnome.
 +
 +
 +
 +
[[Категория:GTK+]]
 +
[[Категория:Java]]

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Wiki.crossplatform.ru:Авторское право). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!