@deftypemethod ButtonPeer {public void} setLabel (java.lang.String@w{ }@var{label}) 

@end deftypemethod
@deftypemethod CheckboxMenuItemPeer {public void} setState (boolean@w{ }@var{state}) 

@end deftypemethod
@deftypemethod CheckboxPeer {public void} setCheckboxGroup (java.awt.CheckboxGroup@w{ }@var{group}) 

@end deftypemethod
@deftypemethod CheckboxPeer {public void} setLabel (java.lang.String@w{ }@var{label}) 

@end deftypemethod
@deftypemethod CheckboxPeer {public void} setState (boolean@w{ }@var{state}) 

@end deftypemethod
@deftypemethod ChoicePeer {public void} add (java.lang.String@w{ }@var{item}, int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod ChoicePeer {public void} remove (int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod ChoicePeer {public void} select (int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod ComponentPeer {public int} checkImage (java.awt.Image@w{ }@var{img}, int@w{ }@var{width}, int@w{ }@var{height}, java.awt.image.ImageObserver@w{ }@var{o}) 

@end deftypemethod
@deftypemethod ComponentPeer {public Image} createImage (java.awt.image.ImageProducer@w{ }@var{prod}) 

@end deftypemethod
@deftypemethod ComponentPeer {public Image} createImage (int@w{ }@var{width}, int@w{ }@var{height}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} dispose () 

@end deftypemethod
@deftypemethod ComponentPeer {public GraphicsConfiguration} getGraphicsConfiguration () 
Get the graphics configuration of the component. The color model
 of the component can be derived from the configuration.
@end deftypemethod
@deftypemethod ComponentPeer {public FontMetrics} getFontMetrics (java.awt.Font@w{ }@var{f}) 

@end deftypemethod
@deftypemethod ComponentPeer {public Graphics} getGraphics () 

@end deftypemethod
@deftypemethod ComponentPeer {public Point} getLocationOnScreen () 

@end deftypemethod
@deftypemethod ComponentPeer {public Dimension} getMinimumSize () 

@end deftypemethod
@deftypemethod ComponentPeer {public Dimension} getPreferredSize () 

@end deftypemethod
@deftypemethod ComponentPeer {public Toolkit} getToolkit () 

@end deftypemethod
@deftypemethod ComponentPeer {public void} handleEvent (java.awt.AWTEvent@w{ }@var{e}) 

@end deftypemethod
@deftypemethod ComponentPeer {public boolean} isFocusTraversable () 

@end deftypemethod
@deftypemethod ComponentPeer {public void} paint (java.awt.Graphics@w{ }@var{graphics}) 

@end deftypemethod
@deftypemethod ComponentPeer {public boolean} prepareImage (java.awt.Image@w{ }@var{img}, int@w{ }@var{width}, int@w{ }@var{height}, java.awt.image.ImageObserver@w{ }@var{o}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} print (java.awt.Graphics@w{ }@var{graphics}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} repaint (long@w{ }@var{tm}, int@w{ }@var{x}, int@w{ }@var{y}, int@w{ }@var{width}, int@w{ }@var{height}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} requestFocus () 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setBackground (java.awt.Color@w{ }@var{color}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setBounds (int@w{ }@var{x}, int@w{ }@var{y}, int@w{ }@var{width}, int@w{ }@var{height}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setCursor (java.awt.Cursor@w{ }@var{cursor}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setEnabled (boolean@w{ }@var{enabled}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setEventMask (long@w{ }@var{eventMask}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setFont (java.awt.Font@w{ }@var{font}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setForeground (java.awt.Color@w{ }@var{color}) 

@end deftypemethod
@deftypemethod ComponentPeer {public void} setVisible (boolean@w{ }@var{visible}) 

@end deftypemethod
@deftypemethod ContainerPeer {public Insets} getInsets () 

@end deftypemethod
@deftypemethod ContainerPeer {public void} beginValidate () 

@end deftypemethod
@deftypemethod ContainerPeer {public void} endValidate () 

@end deftypemethod
@deftypemethod DialogPeer {public void} setResizable (boolean@w{ }@var{resizeable}) 

@end deftypemethod
@deftypemethod DialogPeer {public void} setTitle (java.lang.String@w{ }@var{title}) 

@end deftypemethod
@deftypemethod FileDialogPeer {public void} setDirectory (java.lang.String@w{ }@var{dir}) 

@end deftypemethod
@deftypemethod FileDialogPeer {public void} setFile (java.lang.String@w{ }@var{file}) 

@end deftypemethod
@deftypemethod FileDialogPeer {public void} setFilenameFilter (java.io.FilenameFilter@w{ }@var{filter}) 

@end deftypemethod
@deftypemethod FramePeer {public void} setIconImage (java.awt.Image@w{ }@var{image}) 

@end deftypemethod
@deftypemethod FramePeer {public void} setMenuBar (java.awt.MenuBar@w{ }@var{mb}) 

@end deftypemethod
@deftypemethod FramePeer {public void} setResizable (boolean@w{ }@var{resizable}) 

@end deftypemethod
@deftypemethod FramePeer {public void} setTitle (java.lang.String@w{ }@var{title}) 

@end deftypemethod
@deftypemethod LabelPeer {public void} setAlignment (int@w{ }@var{alignment}) 

@end deftypemethod
@deftypemethod LabelPeer {public void} setText (java.lang.String@w{ }@var{text}) 

@end deftypemethod
@deftypemethod ListPeer {public void} add (java.lang.String@w{ }@var{item}, int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod ListPeer {public void} delItems (int@w{ }@var{start_index}, int@w{ }@var{end_index}) 

@end deftypemethod
@deftypemethod ListPeer {public void} deselect (int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod ListPeer {public int} getSelectedIndexes () 

@end deftypemethod
@deftypemethod ListPeer {public void} makeVisible (int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod ListPeer {public void} removeAll () 

@end deftypemethod
@deftypemethod ListPeer {public void} select (int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod ListPeer {public void} setMultipleMode (boolean@w{ }@var{multipleMode}) 

@end deftypemethod
@deftypemethod MenuBarPeer {public void} addHelpMenu (java.awt.Menu@w{ }@var{menu}) 

@end deftypemethod
@deftypemethod MenuBarPeer {public void} add (java.awt.Menu@w{ }@var{menu}) 

@end deftypemethod
@deftypemethod MenuBarPeer {public void} remove (int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod MenuComponentPeer {public void} dispose () 

@end deftypemethod
@deftypemethod MenuItemPeer {public void} setEnabled (boolean@w{ }@var{enabled}) 

@end deftypemethod
@deftypemethod MenuItemPeer {public void} setLabel (java.lang.String@w{ }@var{text}) 

@end deftypemethod
@deftypemethod MenuPeer {public void} add (java.awt.MenuItem@w{ }@var{item}) 

@end deftypemethod
@deftypemethod MenuPeer {public void} addSeparator () 

@end deftypemethod
@deftypemethod MenuPeer {public void} remove (int@w{ }@var{index}) 

@end deftypemethod
@deftypemethod PopupMenuPeer {public void} show (java.awt.Event@w{ }@var{e}) 

@end deftypemethod
@deftypemethod ScrollbarPeer {public void} setLineIncrement (int@w{ }@var{increment}) 

@end deftypemethod
@deftypemethod ScrollbarPeer {public void} setPageIncrement (int@w{ }@var{increment}) 

@end deftypemethod
@deftypemethod ScrollbarPeer {public void} setValues (int@w{ }@var{value}, int@w{ }@var{visible}, int@w{ }@var{minimum}, int@w{ }@var{maximum}) 

@end deftypemethod
@deftypemethod ScrollPanePeer {public void} childResized (int@w{ }@var{width}, int@w{ }@var{height}) 

@end deftypemethod
@deftypemethod ScrollPanePeer {public int} getHScrollbarHeight () 

@end deftypemethod
@deftypemethod ScrollPanePeer {public int} getVScrollbarWidth () 

@end deftypemethod
@deftypemethod ScrollPanePeer {public void} setScrollPosition (int@w{ }@var{x}, int@w{ }@var{y}) 

@end deftypemethod
@deftypemethod ScrollPanePeer {public void} setUnitIncrement (java.awt.Adjustable@w{ }@var{adj}, int@w{ }@var{increment}) 

@end deftypemethod
@deftypemethod ScrollPanePeer {public void} setValue (java.awt.Adjustable@w{ }@var{adj}, int@w{ }@var{value}) 

@end deftypemethod
@deftypemethod TextAreaPeer {public void} insert (java.lang.String@w{ }@var{text}, int@w{ }@var{pos}) 

@end deftypemethod
@deftypemethod TextAreaPeer {public void} replaceRange (java.lang.String@w{ }@var{text}, int@w{ }@var{start}, int@w{ }@var{end}) 

@end deftypemethod
@deftypemethod TextComponentPeer {public int} getCaretPosition () 

@end deftypemethod
@deftypemethod TextComponentPeer {public int} getSelectionEnd () 

@end deftypemethod
@deftypemethod TextComponentPeer {public int} getSelectionStart () 

@end deftypemethod
@deftypemethod TextComponentPeer {public String} getText () 

@end deftypemethod
@deftypemethod TextComponentPeer {public void} select (int@w{ }@var{start}, int@w{ }@var{end}) 

@end deftypemethod
@deftypemethod TextComponentPeer {public void} setCaretPosition (int@w{ }@var{pos}) 

@end deftypemethod
@deftypemethod TextComponentPeer {public void} setEditable (boolean@w{ }@var{editable}) 

@end deftypemethod
@deftypemethod TextComponentPeer {public void} setText (java.lang.String@w{ }@var{text}) 

@end deftypemethod
@deftypemethod TextFieldPeer {public void} setEchoChar (char@w{ }@var{echo}) 

@end deftypemethod
@deftypemethod WindowPeer {public void} toBack () 

@end deftypemethod
@deftypemethod WindowPeer {public void} toFront () 

@end deftypemethod
