Die Schnittstelle IComponent stellt die
                    gemeinsamen Funktionen für Fenster und Controls bereit. Die
                    Schnittstelle IComponent erweitert
                    IWidget.
                  
         
Es folgt eine Übersicht der wichtigsten Methoden:
    void redraw();Markiert die Komponente, dass sie zu nächstmöglichen Zeitpunkt neu gezeichnet werden muss.
    void setRedrawEnabled(boolean enabled);
                         Deaktiviert, bzw. aktiviert das Neuzeichnen einer Komponente
                         (und deren Kinder, falls vorhanden). Nachdem das Neuzeichnen
                         deaktiviert wurde, werden alle anstehenden Paint Events
                         verworfen, bis wieder
                         setRedrawEnabled(true) aufgerufen wird.
                       
            
                         Diese Funktion kann zum Beispiel verwendet werden, um
                         Flackereffekte zu vermeiden, während ein
                         Container umstrukturiert wird, also Kinder
                         hinzukommen oder entfernt werden.
                       
            
                         Das Deaktivieren mittels
                         setRedrawEnabled(false) ist ein
                         Hinweis der nicht für alle Platformen
                         sowie SPI Implementierungen verfügbar ist. Beispielsweise hat
                         diese Funktion unter Swing keinen Effekt. Glücklicherweise
                         gibt es unter Swing aber auch keine Probleme mit
                         Flackern, wenn Container umorganisiert
                         werden.
                       
            
                         Ein Aufruf von setRedrawEnabled(true)
                         markiert zudem die Komponente, dass sie neu gezeichnet werden
                         muss (siehe Methode redraw()).
                       
            
In einer Fenster basierten Anwendung kann zur selben Zeit genau ein Control den Eingabefokus haben. Dieses Control empfängt dann die Tastatureingaben des Benutzers. Um den Eingabefokus zu erhalten, kann die folgenden Methode verwendet werden:
    boolean requestFocus();Der Aufruf der Methode garantiert nicht, dass der Eingabefokus tatsächlich zugewiesen wurde.
Mittels folgender Methode kann überprüft werden, ob eine Komponente den Eingabefokus besitzt.
    boolean hasFocus();
                         Um sich benachrichtigen zu lassen, dass ein Fokuswechsel
                         stattgefunden hat, kann ein IFocusListener
                         verwendet werden:
                       
            
    void addFocusListener(IFocusListener listener);
    void removeFocusListener(IFocusListener listener);Dieser hat die Methoden:
    void focusGained();
    void focusLost();
                         Um Tastatureingaben zur erhalten kann ein
                         IKeyListener verwendet werden:
                       
            
    void addKeyListener(IKeyListener listener);
    void removeKeyListener(IKeyListener listener);Dieser hat die folgenden Methoden:
    void keyPressed(final IKeyEvent event);
    void keyReleased(final IKeyEvent event);
                         Die Klasse
                         org.jowidgets.tools.controller.KeyAdapter
                         implementiert die IKeyListener
                         Schnittstelle mit leeren Methodenrümpfen und kann verwendet
                         werden, falls nicht alle Methoden implementiert werden sollen.
                       
            
                         Die Schnittstelle IKeyEvent hat die
                         folgenden Methoden:
                       
            
    VirtualKey getVirtualKey();
    Character getCharacter();
    Character getResultingCharacter();
    Set<Modifier> getModifier();
                         Die enum VirtualKey
                         enthält die F-Tasten, Steuertasten wie ENTER, BACKSPACE, TAB,
                         PFEILTASTEN, etc, sowie Zahlen und Buchstaben. Eine
                         vollständige Übersicht über alle VirtualKeys findet sich in
                         der API Spezifikation:
                         http://www.jowidgets.org/api_doc/org/jowidgets/common/types/VirtualKey.html
                       
            
                         Die Methode getCharacter() liefert das
                         zugehörige Zeichen der Taste
                         ohne Anwendung der
                         Modifier. Auf einer deutschen Tastatur liefert somit
                         SHIFT + 1 das Zeichen 1
                         und nicht das Zeichen
                         !.
                       
            
                         Dagegen liefert die Methode
                         getResultingCharacter() das zugehörige
                         Zeichen mit Anwendung der
                         Modifier. Im vorigen Beispiel also anstatt
                         1 das Zeichen !.
                       
            
                         Die Methode getModifier() liefert ein
                         Set der verwendeten Modifier Tasten (CTRL,
                         SHIFT, ALT).
                       
            
Um einfache Mauseingaben zur erhalten, kann ein IMouseListener verwendet werden:
    void addMouseListener(IMouseListener listener);
    void removeMouseListener(IMouseListener listener);
                         Ein IMouseListener hat die folgenden
                         Methoden:
                       
            
    void mousePressed(IMouseButtonEvent event);
    void mouseReleased(IMouseButtonEvent event);
    void mouseDoubleClicked(IMouseButtonEvent event);
    void mouseEnter(IMouseEvent event);
    void mouseExit(IMouseEvent event);
                         Ein IMouseEvent liefert die Position des
                         Ereignisses im Koordinatensystem der zugehörigen Komponente:
                       
            
    Position getPosition();
                         Ein IMouseButtonEvent liefert zusätzlich
                         den Button sowie die Tastatur Modifier.
                       
            
    MouseButton getMouseButton();
    Set<Modifier> getModifiers();
                         Die Klasse
                         org.jowidgets.tools.controller.MouseAdapter
                         implementiert die IMouseListener
                         Schnittstelle mit leeren Methodenrümpfen und kann verwendet
                         werden, falls nicht alle Methoden implementiert werden sollen.
                       
            
                         Um Ereignisse zu Mausbewegungen zur erhalten, kann ein
                         IMouseMotionListener verwendet werden:
                       
            
    void addMouseMotionListener(IMouseMotionListener listener);
    void removeMouseMotionListener(IMouseMotionListener listener);Dieser hat die folgenden Methoden:
    void mouseMoved(IMouseEvent event);
    void mouseDragged(IMouseButtonEvent event);
                         Die Methode mouseMoved() wird bei jeder
                         Änderung der Mausposition aufgerufen, die Methode
                         mouseDragged(), wenn dabei eine Maustaste
                         gedrückt wird.
                       
            
                         Die Klasse
                         org.jowidgets.tools.controller.MouseMotionAdapter
                         implementiert die IMouseMotionListener
                         Schnittstelle mit leeren Methodenrümpfen und kann verwendet
                         werden, falls nicht alle Methoden implementiert werden sollen.
                       
            
                         Popup Events werden ausgelöst, wenn der Benutzer ein
                         Kontextmenü (Popup Menü) öffnen möchte. Die notwendigen
                         Popup Trigger können auf
                         unterschiedlichen Betriebssystemen variieren. Unter Windows
                         geschieht dies zum Beispiel durch einen
                         Rechtsklick mit der Maus. Um Popup Events
                         zu erhalten, kann ein
                         IPopupDetectionListener verwendet werden:
                       
            
    void addPopupDetectionListener(IPopupDetectionListener listener);
    void removePopupDetectionListener(IPopupDetectionListener listener);Dieser hat die folgende Methode:
    void popupDetected(Position position);Die Methode übergibt die Position im Koordinatensystem der Komponente.
Mit Hilfe der folgenden Methode kann ein Popup Menü erzeugt werden:
    IPopupMenu createPopupMenu();
                         Ein Popup Menu implementiert die Schnittstelle
                         IMenu,
                         somit kann man zum Beispiel mit Hilfe der Methode
                         addItem() Menüeinträge hinzufügen. Das Menü
                         kann mit Hilfe der Methode show() angezeigt
                         werden:
                       
            
    void show(Position position);Dabei ist die Position im Koordinatensystem der Komponente anzugeben, für die das Popup Menü erzeugt wurde.
Folgendes Beispiel zeigt die Verwendung eines PopMenüs:
  1      final IPopupMenu menu = frame.createPopupMenu();
  2      
  3      final ISelectableMenuItem option = menu.addItem(BPF.checkedMenuItem("My option"));
  4      option.addItemListener(new IItemStateListener() {
  5          @Override
  6          public void itemStateChanged() {
  7              System.out.println("My option selected: " + option.isSelected());
  8          }
  9      });
 10      
 11      frame.addPopupDetectionListener(new IPopupDetectionListener() {
 12          @Override
 13          public void popupDetected(final Position position) {
 14              menu.show(position);
 15          }
 16      });Popup Menüs können auch mit Hilfe von Menu Models erzeugt werden. Die Methode:
    void setPopupMenu(IMenuModel model);erzeugt ein Popup Menü und bindet es an das übergebene Menu Model. Sobald ein Popup Event ausgelöst wurde, wird das zugehörige Popup Menü angezeigt. Das obige Beispiel sieht dann wie folgt aus:
  1      final MenuModel menu = new MenuModel();
  2  
  3      final ICheckedItemModel option = menu.addCheckedItem("My option");
  4      option.addItemListener(new IItemStateListener() {
  5          @Override
  6          public void itemStateChanged() {
  7              System.out.println("My option selected: " + option.isSelected());
  8          }
  9      });
 10  
 11      frame.setPopupMenu(menu);Die Verwendung von MenuModels hat mehrere Vorteile. Im obigen Beispiel spart man sich zum einen den folgenden Boilerplate Code:
  1      frame.addPopupDetectionListener(new IPopupDetectionListener() {
  2          @Override
  3          public void popupDetected(final Position position) {
  4              menu.show(position);
  5          }
  6      });Zum Anderen kann ein MenuModel wiederverwendet werden. Im folgenden wird das selbe PopMenu auch im Hauptmenü einer Menübar hinzugefügt:
  1      menu.setText("Main Menu");
  2      
  3      final MenuBarModel menuBar = new MenuBarModel();
  4      menuBar.addMenu(menu);
  5      
  6      frame.setMenuBar(menuBar);Weitere Information finden sich auch in den Abschnitten Menüs und Items sowie Menü und Item Models.
Mit Hilfe der folgenden Methoden kann die Vorder- und Hintergrundfarbe umgesetzt werden:
    void setForegroundColor(final IColorConstant colorValue);
    void setBackgroundColor(final IColorConstant colorValue);
                         Nicht alle Komponenten unterstützen diese Funktion für alle
                         SPI Implementierungen und auf allen Betriebssystemen. So kann
                         zum Beispiel unter Windows und SWT nicht die Hintergrundfarbe
                         eines Buttons geändert werden. Durch das Setzen von
                         null wird die Default Farbe verwendet.
                       
            
Um die aktuell gesetzte Farbe zu erhalten, können folgende Methoden verwendet werden:
    IColorConstant getForegroundColor();
    IColorConstant getBackgroundColor();Wurde zuvor keine spezielle Farbe gesetzt und ist somit die Default Farbe aktiv, wird „null“ zurückgegeben.
Zu allgemeinen Verwendung von Farben siehe auch den Abschnitt über Farben.
Mit Hilfe der folgenden Methode kann der Mauszeiger (Cursor) geändert werden:
    void setCursor(final Cursor cursor);
                         Der visible Status einer Komponente legt
                         fest, ob eine Komponente potentiell
                         sichtbar ist. Der Status kann mit den folgenden Methoden
                         gesetzt und abgefragt werden:
                       
            
    void setVisible(final boolean visible);
    boolean isVisible();
                         Die Verwendung kann für Fenster und Controls unterschiedlich
                         sein. Ein Fenster wird durch
                         setVisible(true) auf dem Bildschirm
                         angezeigt und durch setVisible(false)
                         versteckt.
                       
            
Bei Controls hängt es vom verwendeten LayoutManager ab, wie damit verfahren wird. Mig Layout bietet zum Beispiel verschiedene hidemodes für den Umgang mit nicht sichtbaren Controls an.
                         Der Status visible==true sagt nicht aus,
                         dass die Komponente tatsächlich auf dem Bildschirm
                         sichtbar ist. So werden zum Beispiel
                         Controls in nicht sichtbaren TabItems
                         (siehe auch TabFolder) mit
                         Status visible==true nicht angezeigt.
                         Minimierte Fenster haben, auch wenn sie nicht auf dem
                         Bildschirm sichtbar sind, den Status
                         visible==true.
                       
            
                         Um Informationen über die Sichtbarkeit auf dem Bildschirm zu
                         erlangen, kann der showing Status verwendet
                         werden. Dieser wird mittels der folgenden Methode abgefragt:
                       
            
    boolean isShowing();Der Status ist wie folgt definiert:
                         Eine Root Komponente hat den Status
                         showing==true wenn
                         visible==true ist. Eine Kind Komponente hat
                         den Status showing==true wenn sie den
                         Status visible==true
                         und wenn ihr Vater den
                         Status showing==true hat.
                       
            
                         Unter der Annahme, das der verwendetet
                         LayoutManager Controls mit
                         dem Status visible==false nicht anzeigt,
                         gilt dann folgendes:
                       
            
                                      showing==false -> Die Komponente ist
                                      definitiv nicht am Bildschirm sichtbar
                                    
                     
                                      showing==true -> Die Komponente ist
                                      eventuell am Bildschirm sichtbar. (Sie könnte jedoch durch
                                      andere Fenster verdeckt sein oder sich im nicht sichtbaren
                                      Bereich eines
                                      ScrollComposite
                                      befinden und somit dennoch nicht angezeigt werden.)
                                    
                     
                         Der Status showing==false kann etwa
                         ausgenutzt werden, um die Performance zu optimieren, indem für
                         nicht dargestellte Controls Berechnungen
                         ausgelassen werden.
                       
            
                         Um sich über Änderungen des showing Status
                         informieren zu lassen, kann ein
                         IShowingStateListener verwendet werden:
                       
            
    void addShowingStateListener(IShowingStateListener listener);
    void removeShowingStateListener(IShowingStateListener listener);Dieser hat die folgende Methode:
    void showingStateChanged(boolean isShowing);Mit folgenden Methoden kann die Größe eine Komponente gesetzt und ausgelesen werden:
    void setSize(final Dimension size);
    
    void setSize(int width, int height);
    
    Dimension getSize();Folgende Methoden dienen zum Setzen und Auslesen der Position:
    void setPosition(final Position position);
    
    void setPosition(int x, int y);
    
    Position getPosition();Bei Controls ist die Position relativ zum Usprung ihrer Vaterkomponente definiert.
Für Fenster handelt es sich bei der Position um Bildschirmkoordinaten. Dies gilt auch für Kindfenster wie zum Beispiel einen Dialog. Dessen Koordinaten sind nicht relativ zum Vaterfenster zu verstehen.
Der Ursprung eines Koordinatensystems zur Positionsangabe ist immer oben links. Y - Werte verlaufen also von oben nach unten.
Um die Position und Größe einer Komponente in Einem zu setzen, können die folgenden Methoden verwendet werden:
    void setBounds(Rectangle bounds);
    
    Rectangle getBounds();
                         Die Klassen Dimension,
                         Position und Rectangle
                         wurden immutable entworfen. Das bedeutet,
                         dass ihre Koordinaten im Nachhinein nicht modifiziert werden
                         können.
                       
            
Zur Umrechnung von Bildschirmkoordinaten in lokale Koordinaten (bezüglich der Vaterkomponente) oder zurück können die folgenden Methoden verwendet werden:
    Position toLocal(final Position screenPosition);
    
    Position toScreen(final Position localPosition);Zur Umrechnung von Koordinaten in ein Koordinatensystem einer anderen Komponente oder zurück können die folgenden Methoden verwendet werden:
    Position fromComponent(final IComponentCommon component, final Position componentPosition);
    Position toComponent(final Position componentPosition, final IComponentCommon component);