#Signature file v4.1
#Version 3.62

CLSS public abstract interface !annotation java.lang.Deprecated
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE])
intf java.lang.annotation.Annotation
meth public abstract !hasdefault boolean forRemoval()
meth public abstract !hasdefault java.lang.String since()

CLSS public java.lang.Object
cons public init()
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected void finalize() throws java.lang.Throwable
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="9")
meth public boolean equals(java.lang.Object)
meth public final java.lang.Class<?> getClass()
meth public final void notify()
meth public final void notifyAll()
meth public final void wait() throws java.lang.InterruptedException
meth public final void wait(long) throws java.lang.InterruptedException
meth public final void wait(long,int) throws java.lang.InterruptedException
meth public int hashCode()
meth public java.lang.String toString()

CLSS public abstract interface java.lang.annotation.Annotation
meth public abstract boolean equals(java.lang.Object)
meth public abstract int hashCode()
meth public abstract java.lang.Class<? extends java.lang.annotation.Annotation> annotationType()
meth public abstract java.lang.String toString()

CLSS public abstract interface !annotation java.lang.annotation.Documented
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation

CLSS public abstract interface !annotation java.lang.annotation.Retention
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation
meth public abstract java.lang.annotation.RetentionPolicy value()

CLSS public abstract interface !annotation java.lang.annotation.Target
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation
meth public abstract java.lang.annotation.ElementType[] value()

CLSS public abstract interface java.util.EventListener

CLSS public abstract interface javax.swing.event.ChangeListener
intf java.util.EventListener
meth public abstract void stateChanged(javax.swing.event.ChangeEvent)

CLSS public junit.framework.Assert
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons protected init()
meth public static java.lang.String format(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertEquals(boolean,boolean)
meth public static void assertEquals(byte,byte)
meth public static void assertEquals(char,char)
meth public static void assertEquals(double,double,double)
meth public static void assertEquals(float,float,float)
meth public static void assertEquals(int,int)
meth public static void assertEquals(java.lang.Object,java.lang.Object)
meth public static void assertEquals(java.lang.String,boolean,boolean)
meth public static void assertEquals(java.lang.String,byte,byte)
meth public static void assertEquals(java.lang.String,char,char)
meth public static void assertEquals(java.lang.String,double,double,double)
meth public static void assertEquals(java.lang.String,float,float,float)
meth public static void assertEquals(java.lang.String,int,int)
meth public static void assertEquals(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertEquals(java.lang.String,java.lang.String)
meth public static void assertEquals(java.lang.String,java.lang.String,java.lang.String)
meth public static void assertEquals(java.lang.String,long,long)
meth public static void assertEquals(java.lang.String,short,short)
meth public static void assertEquals(long,long)
meth public static void assertEquals(short,short)
meth public static void assertFalse(boolean)
meth public static void assertFalse(java.lang.String,boolean)
meth public static void assertNotNull(java.lang.Object)
meth public static void assertNotNull(java.lang.String,java.lang.Object)
meth public static void assertNotSame(java.lang.Object,java.lang.Object)
meth public static void assertNotSame(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertNull(java.lang.Object)
meth public static void assertNull(java.lang.String,java.lang.Object)
meth public static void assertSame(java.lang.Object,java.lang.Object)
meth public static void assertSame(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertTrue(boolean)
meth public static void assertTrue(java.lang.String,boolean)
meth public static void fail()
meth public static void fail(java.lang.String)
meth public static void failNotEquals(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void failNotSame(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void failSame(java.lang.String)
supr java.lang.Object

CLSS public abstract interface junit.framework.Test
meth public abstract int countTestCases()
meth public abstract void run(junit.framework.TestResult)

CLSS public abstract junit.framework.TestCase
cons public init()
cons public init(java.lang.String)
intf junit.framework.Test
meth protected junit.framework.TestResult createResult()
meth protected void runTest() throws java.lang.Throwable
meth protected void setUp() throws java.lang.Exception
meth protected void tearDown() throws java.lang.Exception
meth public int countTestCases()
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public junit.framework.TestResult run()
meth public static java.lang.String format(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertEquals(boolean,boolean)
meth public static void assertEquals(byte,byte)
meth public static void assertEquals(char,char)
meth public static void assertEquals(double,double,double)
meth public static void assertEquals(float,float,float)
meth public static void assertEquals(int,int)
meth public static void assertEquals(java.lang.Object,java.lang.Object)
meth public static void assertEquals(java.lang.String,boolean,boolean)
meth public static void assertEquals(java.lang.String,byte,byte)
meth public static void assertEquals(java.lang.String,char,char)
meth public static void assertEquals(java.lang.String,double,double,double)
meth public static void assertEquals(java.lang.String,float,float,float)
meth public static void assertEquals(java.lang.String,int,int)
meth public static void assertEquals(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertEquals(java.lang.String,java.lang.String)
meth public static void assertEquals(java.lang.String,java.lang.String,java.lang.String)
meth public static void assertEquals(java.lang.String,long,long)
meth public static void assertEquals(java.lang.String,short,short)
meth public static void assertEquals(long,long)
meth public static void assertEquals(short,short)
meth public static void assertFalse(boolean)
meth public static void assertFalse(java.lang.String,boolean)
meth public static void assertNotNull(java.lang.Object)
meth public static void assertNotNull(java.lang.String,java.lang.Object)
meth public static void assertNotSame(java.lang.Object,java.lang.Object)
meth public static void assertNotSame(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertNull(java.lang.Object)
meth public static void assertNull(java.lang.String,java.lang.Object)
meth public static void assertSame(java.lang.Object,java.lang.Object)
meth public static void assertSame(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void assertTrue(boolean)
meth public static void assertTrue(java.lang.String,boolean)
meth public static void fail()
meth public static void fail(java.lang.String)
meth public static void failNotEquals(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void failNotSame(java.lang.String,java.lang.Object,java.lang.Object)
meth public static void failSame(java.lang.String)
meth public void run(junit.framework.TestResult)
meth public void runBare() throws java.lang.Throwable
meth public void setName(java.lang.String)
supr junit.framework.Assert
hfds fName

CLSS public org.netbeans.jellytools.BuildAndRunActionsStepOperator
cons public init()
meth public java.lang.String getSelectedBuild()
meth public java.lang.String getSelectedClean()
meth public java.lang.String getSelectedGenerateJavadoc()
meth public java.lang.String getSelectedRun()
meth public java.lang.String getSelectedTest()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboBuild()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboClean()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboGenerateJavadoc()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboRun()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboTest()
meth public org.netbeans.jemmy.operators.JLabelOperator lblBuild()
meth public org.netbeans.jemmy.operators.JLabelOperator lblClean()
meth public org.netbeans.jemmy.operators.JLabelOperator lblGenerateJavadoc()
meth public org.netbeans.jemmy.operators.JLabelOperator lblOnlineError()
meth public org.netbeans.jemmy.operators.JLabelOperator lblRun()
meth public org.netbeans.jemmy.operators.JLabelOperator lblTest()
meth public void selectBuild(java.lang.String)
meth public void selectClean(java.lang.String)
meth public void selectGenerateJavadoc(java.lang.String)
meth public void selectRun(java.lang.String)
meth public void selectTest(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NewProjectWizardOperator
hfds _cboBuild,_cboClean,_cboGenerateJavadoc,_cboRun,_cboTest,_lblBuild,_lblClean,_lblGenerateJavadoc,_lblOnlineError,_lblRun,_lblTest

CLSS public org.netbeans.jellytools.Bundle
meth public static java.lang.String getString(java.lang.String,java.lang.String)
meth public static java.lang.String getString(java.lang.String,java.lang.String,java.lang.Object[])
meth public static java.lang.String getString(java.util.ResourceBundle,java.lang.String)
meth public static java.lang.String getString(java.util.ResourceBundle,java.lang.String,java.lang.Object[])
meth public static java.lang.String getStringTrimmed(java.lang.String,java.lang.String)
meth public static java.lang.String getStringTrimmed(java.lang.String,java.lang.String,java.lang.Object[])
meth public static java.util.ResourceBundle getBundle(java.lang.String)
supr java.lang.Object

CLSS public org.netbeans.jellytools.ClasspathStepOperator
cons public init()
meth public java.lang.String getOutputFolder()
meth public java.lang.String getSelectedSourcePackageFolder()
meth public org.netbeans.jemmy.operators.JButtonOperator btAddJARFolder()
meth public org.netbeans.jemmy.operators.JButtonOperator btBrowse()
meth public org.netbeans.jemmy.operators.JButtonOperator btMoveDown()
meth public org.netbeans.jemmy.operators.JButtonOperator btMoveUp()
meth public org.netbeans.jemmy.operators.JButtonOperator btRemove()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboSourcePackageFolder()
meth public org.netbeans.jemmy.operators.JLabelOperator lblClasspath()
meth public org.netbeans.jemmy.operators.JLabelOperator lblOnlineError()
meth public org.netbeans.jemmy.operators.JLabelOperator lblOutputFolderOrJAR()
meth public org.netbeans.jemmy.operators.JLabelOperator lblSourcePackageFolder()
meth public org.netbeans.jemmy.operators.JListOperator lstClasspath()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtOutputFolder()
meth public void addJARFolder()
meth public void browse()
meth public void moveDown()
meth public void moveUp()
meth public void remove()
meth public void selectClasspath(java.lang.String)
meth public void selectSourcePackageFolder(java.lang.String)
meth public void setOutputFolder(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NewProjectWizardOperator
hfds _btAddJARFolder,_btBrowse,_btMoveDown,_btMoveUp,_btRemove,_cboSourcePackageFolder,_lblClasspath,_lblOnlineError,_lblOutputFolderOrJAR,_lblSourcePackageFolder,_lstClasspath,_txtOutputFolder

CLSS public org.netbeans.jellytools.DocumentsDialogOperator
cons public init()
meth public java.lang.String getDescription()
meth public org.netbeans.jemmy.operators.JButtonOperator btClose()
meth public org.netbeans.jemmy.operators.JButtonOperator btCloseDocuments()
meth public org.netbeans.jemmy.operators.JButtonOperator btSaveDocuments()
meth public org.netbeans.jemmy.operators.JButtonOperator btSwitchToDocument()
meth public org.netbeans.jemmy.operators.JListOperator lstDocuments()
meth public org.netbeans.jemmy.operators.JTextAreaOperator txtDescription()
meth public static org.netbeans.jellytools.DocumentsDialogOperator invoke()
meth public void closeDocuments()
meth public void saveDocuments()
meth public void selectDocument(int)
meth public void selectDocument(java.lang.String)
meth public void selectDocuments(int[])
meth public void selectDocuments(java.lang.String[])
meth public void switchToDocument()
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _btActivate,_btClose,_btCloseDocuments,_btSaveDocuments,_lstDocuments,_txtDescription,title

CLSS public org.netbeans.jellytools.EditorOperator
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(javax.swing.JComponent)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int)
innr public final static EditorSubchooser
meth public boolean contains(java.lang.String)
meth public boolean isCollapsed()
meth public boolean isCollapsed(int)
meth public int getLineNumber()
meth public java.lang.Object[] getAnnotations()
meth public java.lang.Object[] getAnnotations(int)
meth public java.lang.String getText()
meth public java.lang.String getText(int)
meth public org.netbeans.jemmy.operators.AbstractButtonOperator getToolbarButton(int)
meth public org.netbeans.jemmy.operators.AbstractButtonOperator getToolbarButton(java.lang.String)
meth public org.netbeans.jemmy.operators.JEditorPaneOperator txtEditorPane()
meth public org.netbeans.jemmy.operators.JLabelOperator lblInputMode()
meth public org.netbeans.jemmy.operators.JLabelOperator lblRowColumn()
meth public org.netbeans.jemmy.operators.JLabelOperator lblStatusBar()
meth public static java.lang.String getAnnotationShortDescription(java.lang.Object)
meth public static java.lang.String getAnnotationType(java.lang.Object)
meth public static void closeDiscardAll()
meth public void clickForPopup()
meth public void close(boolean)
meth public void collapseFold()
meth public void collapseFold(int)
meth public void delete(int)
meth public void delete(int,int)
meth public void delete(int,int,int)
meth public void deleteLine(int)
meth public void expandFold()
meth public void expandFold(int)
meth public void insert(java.lang.String)
meth public void insert(java.lang.String,int,int)
meth public void pushDownArrowKey()
meth public void pushEndKey()
meth public void pushHomeKey()
meth public void pushKey(int)
meth public void pushKey(int,int)
meth public void pushTabKey()
meth public void pushUpArrowKey()
meth public void replace(java.lang.String,java.lang.String)
meth public void replace(java.lang.String,java.lang.String,int)
meth public void save()
meth public void select(int)
meth public void select(int,int)
meth public void select(int,int,int)
meth public void select(java.lang.String)
meth public void select(java.lang.String,int)
meth public void setCaretPosition(int)
meth public void setCaretPosition(int,int)
meth public void setCaretPosition(java.lang.String,boolean)
meth public void setCaretPosition(java.lang.String,int,boolean)
meth public void setCaretPositionRelative(int)
meth public void setCaretPositionToEndOfLine(int)
meth public void setCaretPositionToLine(int)
meth public void typeKey(char)
meth public void typeKey(char,int)
meth public void typeKey(int,char,int)
meth public void verify()
meth public void waitCollapsed()
meth public void waitExpanded()
meth public void waitFolding()
meth public void waitModified(boolean)
supr org.netbeans.jellytools.TopComponentOperator
hfds WAIT_TIME,_lblInputMode,_lblRowColumn,_lblStatusBar,_txtEditorPane
hcls ToolbarButtonChooser

CLSS public final static org.netbeans.jellytools.EditorOperator$EditorSubchooser
 outer org.netbeans.jellytools.EditorOperator
cons public init()
intf org.netbeans.jemmy.ComponentChooser
meth public boolean checkComponent(java.awt.Component)
meth public java.lang.String getDescription()
supr java.lang.Object

CLSS public org.netbeans.jellytools.EditorWindowOperator
cons public init()
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static boolean jumpLeft()
meth public static org.netbeans.jellytools.EditorOperator getEditor()
meth public static org.netbeans.jellytools.EditorOperator getEditor(int)
meth public static org.netbeans.jellytools.EditorOperator getEditor(java.lang.String)
meth public static org.netbeans.jellytools.EditorOperator selectPage(int)
meth public static org.netbeans.jellytools.EditorOperator selectPage(java.lang.String)
meth public static org.netbeans.jemmy.operators.JButtonOperator btDown()
meth public static org.netbeans.jemmy.operators.JButtonOperator btLeft()
meth public static org.netbeans.jemmy.operators.JButtonOperator btRight()
meth public static void closeDiscard()
meth public static void closeDiscard(org.openide.windows.Mode)
meth public static void moveTabsLeft()
meth public static void moveTabsRight()
meth public static void selectDocument(int)
meth public static void selectDocument(java.lang.String)
meth public static void verify()
supr java.lang.Object
hfds _btDown,_btLeft,_btRight

CLSS public org.netbeans.jellytools.FavoritesOperator
cons public init()
meth public org.netbeans.jemmy.operators.JTreeOperator tree()
meth public static org.netbeans.jellytools.FavoritesOperator invoke()
meth public void collapseAll()
meth public void verify()
supr org.netbeans.jellytools.TopComponentOperator
hfds FAVORITES_CAPTION,_tree,viewAction
hcls FavoritesTabSubchooser

CLSS public org.netbeans.jellytools.FilesTabOperator
cons public init()
meth public org.netbeans.jellytools.nodes.Node getProjectNode(java.lang.String)
meth public org.netbeans.jemmy.operators.JTreeOperator tree()
meth public static org.netbeans.jellytools.FilesTabOperator invoke()
meth public void collapseAll()
meth public void verify()
supr org.netbeans.jellytools.TopComponentOperator
hfds FILES_CAPTION,_tree,viewAction
hcls FilesTabSubchooser

CLSS public org.netbeans.jellytools.FindInFilesOperator
cons public init()
meth public org.netbeans.jellytools.SearchResultsOperator find()
meth public org.netbeans.jemmy.operators.JButtonOperator btFind()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbCase()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbWholeWords()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtPatterns()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtText()
meth public static org.netbeans.jellytools.FindInFilesOperator invoke(org.netbeans.jellytools.nodes.Node)
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _btFind,invokeAction

CLSS public org.netbeans.jellytools.HelpOperator
cons public init()
cons public init(java.lang.String)
meth public java.lang.String getContentText()
meth public java.lang.String getTitle()
meth public org.netbeans.jemmy.operators.JButtonOperator btBack()
meth public org.netbeans.jemmy.operators.JButtonOperator btNext()
meth public org.netbeans.jemmy.operators.JButtonOperator btPageSetup()
meth public org.netbeans.jemmy.operators.JButtonOperator btPrint()
meth public org.netbeans.jemmy.operators.JEditorPaneOperator txtContentViewer()
meth public org.netbeans.jemmy.operators.JSplitPaneOperator splpHelpSplitPane()
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator tbpHelpTabPane()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtSearchFind()
meth public org.netbeans.jemmy.operators.JTreeOperator treeContents()
meth public org.netbeans.jemmy.operators.JTreeOperator treeSearch()
meth public static org.netbeans.jellytools.HelpOperator invoke()
meth public void back()
meth public void close()
meth public void next()
meth public void pageSetup()
meth public void print()
meth public void searchFind(java.lang.String)
meth public void selectPageContents()
meth public void selectPageSearch()
meth public void verify()
supr org.netbeans.jemmy.operators.WindowOperator
hfds _btBack,_btNext,_btPageSetup,_btPrint,_splpHelpSplitPane,_tbpHelpTabPane,_treeContents,_treeSearch,_txtContentViewer,_txtSearchFind,helpAction,helpButtonChooser,jHelpChooser
hcls HelpWindowChooser

CLSS public org.netbeans.jellytools.JavaProjectsTabOperator
cons public init()
meth public org.netbeans.jellytools.nodes.JavaProjectRootNode getJavaProjectRootNode(java.lang.String)
meth public static org.netbeans.jellytools.JavaProjectsTabOperator invoke()
supr org.netbeans.jellytools.ProjectsTabOperator

CLSS public org.netbeans.jellytools.JellyTestCase
cons public init(java.lang.String)
fld public boolean captureScreen
fld public boolean closeAllModal
fld public boolean dumpScreen
fld public boolean waitNoEvent
meth protected !varargs static junit.framework.Test createModuleTest(java.lang.Class,java.lang.String[])
meth protected !varargs static junit.framework.Test createModuleTest(java.lang.String,java.lang.String,java.lang.Class,java.lang.String[])
meth protected void clearTestStatus()
meth protected void endTest()
meth protected void failNotify(java.lang.Throwable)
meth protected void initEnvironment()
meth protected void runTest() throws java.lang.Throwable
meth protected void startTest()
meth public !varargs void closeOpenedProjects(java.lang.Object[])
meth public !varargs void openDataProjects(java.lang.String[]) throws java.io.IOException
meth public !varargs void openProjects(java.lang.String[]) throws java.io.IOException
meth public static org.netbeans.junit.NbModuleSuite$Configuration emptyConfiguration()
meth public static void closeAllModal()
meth public void closeOpenedProjects()
meth public void fail(java.lang.Throwable)
meth public void runBare() throws java.lang.Throwable
meth public void waitScanFinished()
supr org.netbeans.junit.NbTestCase
hfds isScreenCaptured,openedProjects,testStatus

CLSS public org.netbeans.jellytools.JellyVersion
cons public init()
meth public static java.lang.String getBuild()
meth public static java.lang.String getIDEVersion()
meth public static java.lang.String getJemmyMajorVersion()
meth public static java.lang.String getJemmyMinorVersion()
meth public static java.lang.String getJemmyVersion()
meth public static java.lang.String getMajorVersion()
meth public static java.lang.String getMinorVersion()
meth public static java.lang.String getVersion()
meth public static void checkJemmyVersion()
meth public static void main(java.lang.String[])
supr java.lang.Object
hfds jemmyVersionChecked

CLSS public org.netbeans.jellytools.MainWindowOperator
cons public init()
innr public StatusTextTracer
meth public int getToolbarCount()
meth public java.lang.String getStatusText()
meth public java.lang.String getToolbarName(int)
meth public org.netbeans.jellytools.MainWindowOperator$StatusTextTracer getStatusTextTracer()
meth public org.netbeans.jemmy.operators.ContainerOperator getToolbar(int)
meth public org.netbeans.jemmy.operators.ContainerOperator getToolbar(java.lang.String)
meth public org.netbeans.jemmy.operators.JButtonOperator getToolbarButton(org.netbeans.jemmy.operators.ContainerOperator,int)
meth public org.netbeans.jemmy.operators.JButtonOperator getToolbarButton(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String)
meth public org.netbeans.jemmy.operators.JMenuBarOperator menuBar()
meth public static org.netbeans.jellytools.MainWindowOperator getDefault()
meth public void dragNDropToolbar(org.netbeans.jemmy.operators.ContainerOperator,int,int)
meth public void maximize()
meth public void pushToolbarPopupMenu(java.lang.String)
meth public void pushToolbarPopupMenuNoBlock(java.lang.String)
meth public void setStatusText(java.lang.String)
meth public void verify()
meth public void waitStatusText(java.lang.String)
supr org.netbeans.jemmy.operators.JFrameOperator
hfds _menuBar,statusTextTracer
hcls ToolbarButtonChooser,ToolbarChooser

CLSS public org.netbeans.jellytools.MainWindowOperator$StatusTextTracer
 outer org.netbeans.jellytools.MainWindowOperator
cons public init(org.netbeans.jellytools.MainWindowOperator)
intf javax.swing.event.ChangeListener
meth protected void finalize()
meth public boolean contains(java.lang.String,boolean)
meth public java.util.ArrayList getStatusTextHistory()
meth public void clear()
meth public void printStatusTextHistory(java.io.PrintStream)
meth public void start()
meth public void stateChanged(javax.swing.event.ChangeEvent)
meth public void stop()
meth public void waitText(java.lang.String)
meth public void waitText(java.lang.String,boolean)
supr java.lang.Object
hfds statusTextHistory

CLSS public org.netbeans.jellytools.NavigatorOperator
cons public init()
meth public org.netbeans.jemmy.operators.JTreeOperator getTree()
meth public static org.netbeans.jellytools.NavigatorOperator invokeNavigator()
supr org.netbeans.jellytools.TopComponentOperator
hfds NAVIGATOR_TITLE
hcls NavigatorAction,NavigatorComponentChooser

CLSS public org.netbeans.jellytools.NbDialogOperator
cons public init(java.lang.String)
cons public init(javax.swing.JDialog)
meth public org.netbeans.jemmy.operators.JButtonOperator btCancel()
meth public org.netbeans.jemmy.operators.JButtonOperator btClose()
meth public org.netbeans.jemmy.operators.JButtonOperator btHelp()
meth public org.netbeans.jemmy.operators.JButtonOperator btNo()
meth public org.netbeans.jemmy.operators.JButtonOperator btOK()
meth public org.netbeans.jemmy.operators.JButtonOperator btYes()
meth public void cancel()
meth public void close()
meth public void closeByButton()
meth public void help()
meth public void no()
meth public void ok()
meth public void yes()
supr org.netbeans.jemmy.operators.JDialogOperator
hfds _btCancel,_btClose,_btHelp,_btNo,_btOK,_btYes

CLSS public org.netbeans.jellytools.NewFileWizardOperator
cons public init()
cons public init(java.lang.String)
meth public java.lang.String getDescription()
meth public java.lang.String getSelectedFileType()
meth public java.lang.String getSelectedProject()
meth public javax.swing.tree.TreePath getSelectedCategory()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboProject()
meth public org.netbeans.jemmy.operators.JEditorPaneOperator txtDescription()
meth public org.netbeans.jemmy.operators.JLabelOperator lblCategories()
meth public org.netbeans.jemmy.operators.JLabelOperator lblDescription()
meth public org.netbeans.jemmy.operators.JLabelOperator lblFileTypes()
meth public org.netbeans.jemmy.operators.JLabelOperator lblProject()
meth public org.netbeans.jemmy.operators.JListOperator lstFileTypes()
meth public org.netbeans.jemmy.operators.JTreeOperator treeCategories()
meth public static org.netbeans.jellytools.NewFileWizardOperator invoke()
meth public static org.netbeans.jellytools.NewFileWizardOperator invoke(java.lang.String)
meth public static org.netbeans.jellytools.NewFileWizardOperator invoke(org.netbeans.jellytools.nodes.Node,java.lang.String,java.lang.String)
meth public void selectCategory(java.lang.String)
meth public void selectFileType(java.lang.String)
meth public void selectProject(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.WizardOperator
hfds _cboProject,_lblCategories,_lblDescription,_lblFileTypes,_lblProject,_lstFileTypes,_treeCategories,_txtDescription

CLSS public org.netbeans.jellytools.NewJavaFileNameLocationStepOperator
cons public init()
cons public init(java.lang.String)
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboLocation()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboPackage()
meth public org.netbeans.jemmy.operators.JLabelOperator lblCreatedFile()
meth public org.netbeans.jemmy.operators.JLabelOperator lblLocation()
meth public org.netbeans.jemmy.operators.JLabelOperator lblObjectName()
meth public org.netbeans.jemmy.operators.JLabelOperator lblPackage()
meth public org.netbeans.jemmy.operators.JLabelOperator lblProject()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtCreatedFile()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtObjectName()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtProject()
meth public void selectPackage(java.lang.String)
meth public void selectSourcePackagesLocation()
meth public void selectTestPackagesLocation()
meth public void setObjectName(java.lang.String)
meth public void setPackage(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NewFileWizardOperator
hfds _cboLocation,_cboPackage,_lblCreatedFile,_lblLocation,_lblObjectName,_lblPackage,_lblProject,_txtCreatedFile,_txtObjectName,_txtProject

CLSS public org.netbeans.jellytools.NewJavaFileWizardOperator
cons public init()
meth public static void create(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)
supr org.netbeans.jellytools.NewFileWizardOperator

CLSS public org.netbeans.jellytools.NewJavaProjectNameLocationStepOperator
cons public init()
meth public org.netbeans.jemmy.operators.JButtonOperator btBrowseBuildScript()
meth public org.netbeans.jemmy.operators.JButtonOperator btBrowseLocation()
meth public org.netbeans.jemmy.operators.JButtonOperator btBrowseProjectFolder()
meth public org.netbeans.jemmy.operators.JButtonOperator btBrowseProjectLocation()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbCreateMainClass()
meth public org.netbeans.jemmy.operators.JLabelOperator lblBuildScript()
meth public org.netbeans.jemmy.operators.JLabelOperator lblLocation()
meth public org.netbeans.jemmy.operators.JLabelOperator lblProjectFolder()
meth public org.netbeans.jemmy.operators.JLabelOperator lblProjectLocation()
meth public org.netbeans.jemmy.operators.JLabelOperator lblProjectName()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtBuildScript()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtCreateMainClass()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtLocation()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtProjectFolder()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtProjectLocation()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtProjectName()
meth public void verify()
supr org.netbeans.jellytools.NewProjectWizardOperator
hfds _btBrowseBuildScript,_btBrowseLocation,_btBrowseProjectFolder,_cbCreateMainClass,_lblBuildScript,_lblLocation,_lblProjectFolder,_lblProjectLocation,_lblProjectName,_txtBuildScript,_txtCreateMainClass,_txtLocation,_txtProjectFolder,_txtProjectLocation,_txtProjectName

CLSS public org.netbeans.jellytools.NewProjectWizardOperator
cons public init()
cons public init(java.lang.String)
meth public java.lang.String getDescription()
meth public java.lang.String getSelectedProject()
meth public javax.swing.tree.TreePath getSelectedCategory()
meth public org.netbeans.jemmy.operators.JEditorPaneOperator txtDescription()
meth public org.netbeans.jemmy.operators.JLabelOperator lblCategories()
meth public org.netbeans.jemmy.operators.JLabelOperator lblDescription()
meth public org.netbeans.jemmy.operators.JLabelOperator lblProjects()
meth public org.netbeans.jemmy.operators.JListOperator lstProjects()
meth public org.netbeans.jemmy.operators.JTreeOperator treeCategories()
meth public static org.netbeans.jellytools.NewProjectWizardOperator invoke()
meth public static org.netbeans.jellytools.NewProjectWizardOperator invoke(java.lang.String)
meth public void finish()
meth public void selectCategory(java.lang.String)
meth public void selectProject(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.WizardOperator
hfds _lblCategories,_lblDescription,_lblProjects,_lstProjects,_treeCategories,_txtDescription

CLSS public org.netbeans.jellytools.OptionsOperator
cons public init()
fld public final static int DEFAULT_LEVEL = 3
fld public final static int USER_LEVEL = 2
meth protected int getValue(int,int)
meth protected void clickOnSecondHeader()
meth protected void defineHere(int,int)
meth protected void editLevel(int,int,java.lang.String)
meth protected void revertLevel(int,int)
meth protected void setLevel(int,int)
meth public int getLevel(java.lang.String)
meth public int selectOption(java.lang.String)
meth public java.awt.Component getSource()
meth public org.netbeans.jellytools.TreeTableOperator treeTable()
meth public org.netbeans.jellytools.properties.PropertySheetOperator getPropertySheet(java.lang.String)
meth public static org.netbeans.jellytools.OptionsOperator invoke()
meth public void hideLevels()
meth public void selectCategory(java.lang.String)
meth public void selectEditor()
meth public void selectFontAndColors()
meth public void selectGeneral()
meth public void selectJava()
meth public void selectKeymap()
meth public void selectMiscellaneous()
meth public void setDefaultLevel(java.lang.String)
meth public void setLevel(java.lang.String,int)
meth public void setUserLevel(java.lang.String)
meth public void showLevels()
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds BEFORE_EDITING_TIMEOUT,DEFINE_HERE,invokeAction,optionsSubchooser,sourceInternal

CLSS public org.netbeans.jellytools.OutlineOperator
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
cons public init(org.netbeans.swing.outline.Outline)
meth protected int getPrecedingSiblingsRowSpan(javax.swing.tree.TreePath)
meth protected int getRowSpanOfLastElement(javax.swing.tree.TreePath)
meth protected int getVisibleRootModifier()
meth public boolean isExpanded(javax.swing.tree.TreePath)
meth public int getRowForPath(javax.swing.tree.TreePath)
meth public int getTreeColumnIndex()
meth public java.awt.Point getLocationForPath(javax.swing.tree.TreePath)
meth public javax.swing.tree.TreePath findNextPathElement(javax.swing.tree.TreePath,java.lang.String)
meth public javax.swing.tree.TreePath findNextPathElement(javax.swing.tree.TreePath,java.lang.String,int)
meth public javax.swing.tree.TreePath findPath(java.lang.String)
meth public javax.swing.tree.TreePath findPath(javax.swing.tree.TreePath,java.lang.String)
meth public org.netbeans.jellytools.nodes.OutlineNode getRootNode(java.lang.String)
meth public org.netbeans.jellytools.nodes.OutlineNode getRootNode(java.lang.String,int)
meth public org.netbeans.swing.outline.Outline getOutline()
meth public void expandPath(javax.swing.tree.TreePath)
meth public void scrollToPath(javax.swing.tree.TreePath)
meth public void selectPath(javax.swing.tree.TreePath)
meth public void waitExpanded(javax.swing.tree.TreePath)
supr org.netbeans.jemmy.operators.JTableOperator
hcls NodeWaiter,OutlineFinder

CLSS public org.netbeans.jellytools.OutputOperator
cons public init()
meth public java.lang.String getText()
meth public org.netbeans.jellytools.OutputTabOperator getOutputTab(java.lang.String)
meth public static org.netbeans.jellytools.OutputOperator invoke()
meth public void clear()
meth public void copy()
meth public void find()
meth public void findNext()
meth public void nextError()
meth public void previousError()
meth public void saveAs()
meth public void selectAll()
meth public void verify()
meth public void wrapText()
supr org.netbeans.jellytools.TopComponentOperator
hfds invokeAction,outputSubchooser

CLSS public org.netbeans.jellytools.OutputTabOperator
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(javax.swing.JComponent)
innr protected final static OutputTabSubchooser
meth public final void makeComponentVisible()
meth public int findLine(java.lang.String)
meth public int getLength()
meth public int getLineCount()
meth public java.lang.String getLine(int)
meth public java.lang.String getText()
meth public java.lang.String getText(int,int)
meth public org.netbeans.jemmy.operators.ComponentOperator outputPaneOperator()
meth public org.netbeans.jemmy.operators.JButtonOperator btnAntSettings()
meth public org.netbeans.jemmy.operators.JButtonOperator btnReRun()
meth public org.netbeans.jemmy.operators.JButtonOperator btnReRunWithDifferentParameters()
meth public org.netbeans.jemmy.operators.JButtonOperator btnStop()
meth public void clear()
meth public void close()
meth public void copy()
meth public void find()
meth public void findNext()
meth public void nextError()
meth public void previousError()
meth public void saveAs()
meth public void selectAll()
meth public void verify()
meth public void waitText(java.lang.String)
meth public void wrapText()
supr org.netbeans.jemmy.operators.JComponentOperator
hfds btnAntSettings,btnReRun,btnReRunWithDifferentParameters,btnStop,clearAction,closeAction,copyAction,findAction,findNextAction,nextErrorAction,outputPaneOperator,previousErrorAction,saveAsAction,wrapTextAction

CLSS protected final static org.netbeans.jellytools.OutputTabOperator$OutputTabSubchooser
 outer org.netbeans.jellytools.OutputTabOperator
cons public init()
cons public init(java.lang.String)
intf org.netbeans.jemmy.ComponentChooser
meth public boolean checkComponent(java.awt.Component)
meth public java.lang.String getDescription()
supr java.lang.Object
hfds tabName

CLSS public org.netbeans.jellytools.PaletteOperator
cons public init()
meth public org.netbeans.jemmy.operators.JListOperator lstComponents()
meth public static org.netbeans.jellytools.PaletteOperator invoke()
meth public void expand(org.netbeans.jemmy.operators.JCheckBoxOperator,boolean)
meth public void selectComponent(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.TopComponentOperator
hfds PALETTE_TITLE,paletteAction
hcls PaletteTopComponentChooser

CLSS public org.netbeans.jellytools.PluginsOperator
cons public init()
meth public org.netbeans.jellytools.WizardOperator installer()
meth public org.netbeans.jemmy.operators.JButtonOperator btAddPlugins()
meth public org.netbeans.jemmy.operators.JButtonOperator btDeactivate()
meth public org.netbeans.jemmy.operators.JButtonOperator btInstall()
meth public org.netbeans.jemmy.operators.JButtonOperator btReloadCatalog()
meth public org.netbeans.jemmy.operators.JButtonOperator btUninstall()
meth public org.netbeans.jemmy.operators.JButtonOperator btUpdate()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbShowDetails()
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator selectAvailablePlugins()
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator selectDownloaded()
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator selectInstalled()
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator selectSettings()
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator selectTab(java.lang.String)
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator selectUpdates()
meth public org.netbeans.jemmy.operators.JTabbedPaneOperator tabbedPane()
meth public org.netbeans.jemmy.operators.JTableOperator table()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtSearch()
meth public static org.netbeans.jellytools.PluginsOperator invoke()
meth public void addPlugin(java.lang.String)
meth public void addPlugins()
meth public void deactivate()
meth public void finishInstall()
meth public void install()
meth public void install(java.lang.String)
meth public void install(java.lang.String[])
meth public void reloadCatalog()
meth public void search(java.lang.String)
meth public void selectPlugin(java.lang.String)
meth public void selectPlugins(java.lang.String[])
meth public void uninstall()
meth public void update()
meth public void waitTabEnabled(java.lang.String)
supr org.netbeans.jellytools.NbDialogOperator
hfds AVAILABLE_PLUGINS_LABEL,INSTALLED_LABEL,PLUGINS_ITEM,TITLE,TOOLS_ITEM,_tabbedPane

CLSS public org.netbeans.jellytools.ProjectsTabOperator
cons public init()
fld protected final static org.netbeans.jellytools.actions.ProjectViewAction viewAction
meth public org.netbeans.jellytools.nodes.ProjectRootNode getProjectRootNode(java.lang.String)
meth public org.netbeans.jemmy.operators.JTreeOperator tree()
meth public static org.netbeans.jellytools.ProjectsTabOperator invoke()
meth public void collapseAll()
meth public void verify()
supr org.netbeans.jellytools.TopComponentOperator
hfds PROJECT_CAPTION,_tree
hcls ProjectsTabSubchooser

CLSS public org.netbeans.jellytools.QuestionDialogOperator
cons public init()
cons public init(java.lang.String)
meth public org.netbeans.jemmy.operators.JLabelOperator lblQuestion()
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _lblQuestion

CLSS public org.netbeans.jellytools.RuntimeTabOperator
cons public init()
meth public org.netbeans.jellytools.nodes.Node getRootNode()
meth public org.netbeans.jemmy.operators.JTreeOperator tree()
meth public static org.netbeans.jellytools.RuntimeTabOperator invoke()
meth public void collapseAll()
meth public void verify()
supr org.netbeans.jellytools.TopComponentOperator
hfds RUNTIME_CAPTION,_tree,viewAction
hcls RuntimeTabSubchooser

CLSS public org.netbeans.jellytools.SaveAsTemplateOperator
cons public init()
meth public org.netbeans.jellytools.nodes.Node getRootNode()
meth public org.netbeans.jemmy.operators.JLabelOperator lblSelectTheCategory()
meth public org.netbeans.jemmy.operators.JTreeOperator tree()
meth public static org.netbeans.jellytools.SaveAsTemplateOperator invoke(org.netbeans.jellytools.nodes.Node)
meth public static org.netbeans.jellytools.SaveAsTemplateOperator invoke(org.netbeans.jellytools.nodes.Node[])
meth public void selectTemplate(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _lblSelectTheCategory,_tree

CLSS public org.netbeans.jellytools.SearchResultsOperator
cons public init()
meth public org.netbeans.jellytools.FindInFilesOperator modifySearch()
meth public org.netbeans.jellytools.OutlineOperator outlineResult()
meth public org.netbeans.jellytools.OutputTabOperator showDetails()
meth public org.netbeans.jemmy.operators.JButtonOperator btModifySearch()
meth public org.netbeans.jemmy.operators.JButtonOperator btShowDetails()
meth public org.netbeans.jemmy.operators.JButtonOperator btStopSearch()
meth public void openResult(java.lang.String)
meth public void selectResult(java.lang.String)
meth public void stopSearch()
meth public void verify()
meth public void waitEndOfSearch()
supr org.netbeans.jellytools.TopComponentOperator
hfds SEARCH_TIME,TITLE,_btModifySearch,_btShowDetails,_btStop,_outlineResult

CLSS public org.netbeans.jellytools.SourcePackageFoldersStepOperator
cons public init()
meth public java.lang.String getSelectedSourceLevel()
meth public org.netbeans.jemmy.operators.JButtonOperator btAddFolder()
meth public org.netbeans.jemmy.operators.JButtonOperator btRemove()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboSourceLevel()
meth public org.netbeans.jemmy.operators.JLabelOperator lblOnlineError()
meth public org.netbeans.jemmy.operators.JLabelOperator lblSourceLevel()
meth public org.netbeans.jemmy.operators.JLabelOperator lblSourcePackageFolders()
meth public org.netbeans.jemmy.operators.JLabelOperator lblSpecifyFolders()
meth public org.netbeans.jemmy.operators.JTableOperator tblSourcePackageFolders()
meth public void addFolder()
meth public void remove()
meth public void selectSourceLevel(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NewProjectWizardOperator
hfds _btAddFolder,_btRemove,_cboSourceLevel,_lblOnlineError,_lblSourceLevel,_lblSourcePackageFolders,_lblSpecifyFolders,_tblSourcePackageFolders

CLSS public abstract org.netbeans.jellytools.TestBundleKeys
cons public init(java.lang.String)
meth protected abstract java.lang.ClassLoader getDescendantClassLoader()
meth protected abstract java.lang.String getPropertiesName()
meth protected static java.util.Properties getProperties(java.lang.ClassLoader,java.lang.String) throws java.io.IOException
meth protected static junit.framework.Test prepareSuite(java.lang.Class,java.lang.String)
meth protected void runTest() throws java.lang.Throwable
supr org.netbeans.junit.NbTestCase
hfds props

CLSS public org.netbeans.jellytools.TopComponentOperator
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(javax.swing.JComponent)
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int)
meth protected boolean isOpened()
meth protected org.netbeans.jellytools.TopComponentOperator findParentTopComponent()
meth protected static javax.swing.JComponent findTopComponent(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int,org.netbeans.jemmy.ComponentChooser)
meth protected static javax.swing.JComponent waitTopComponent(java.lang.String,int)
meth protected static javax.swing.JComponent waitTopComponent(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int,org.netbeans.jemmy.ComponentChooser)
meth public boolean isModified()
meth public java.awt.Container findTabDisplayer()
meth public org.netbeans.swing.tabcontrol.TabbedContainer findTabbedAdapter()
meth public static javax.swing.JComponent findTopComponent(java.lang.String,int)
meth public void attachTo(java.lang.String,java.lang.String)
meth public void attachTo(org.netbeans.jellytools.TopComponentOperator,java.lang.String)
meth public void cloneDocument()
meth public void close()
meth public void closeAllDocuments()
meth public void closeDiscard()
meth public void closeWindow()
meth public void makeComponentVisible()
meth public void maximize()
meth public void pushMenuOnTab(java.lang.String)
meth public void restore()
meth public void save()
meth public void setUnmodified()
meth public void waitClosed()
supr org.netbeans.jemmy.operators.JComponentOperator
hfds closeAllDocumentsItem,closeWindowItem

CLSS public org.netbeans.jellytools.TreeTableOperator
cons public init(javax.swing.JTable)
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
innr public static RenderedMouseDriver
innr public static RenderedTreeOperator
meth public int selectNode(java.lang.String)
meth public org.netbeans.jemmy.operators.JTreeOperator tree()
meth public void verify()
supr org.netbeans.jemmy.operators.JTableOperator
hfds _tree
hcls TreeTableFinder

CLSS public static org.netbeans.jellytools.TreeTableOperator$RenderedMouseDriver
 outer org.netbeans.jellytools.TreeTableOperator
cons public init()
intf org.netbeans.jemmy.drivers.MouseDriver
meth public void clickMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int,int,org.netbeans.jemmy.Timeout)
meth public void dragMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int)
meth public void dragNDrop(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int,int,int,org.netbeans.jemmy.Timeout,org.netbeans.jemmy.Timeout)
meth public void enterMouse(org.netbeans.jemmy.operators.ComponentOperator)
meth public void exitMouse(org.netbeans.jemmy.operators.ComponentOperator)
meth public void moveMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int)
meth public void pressMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int)
meth public void releaseMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int)
supr org.netbeans.jemmy.drivers.SupportiveDriver

CLSS public static org.netbeans.jellytools.TreeTableOperator$RenderedTreeOperator
 outer org.netbeans.jellytools.TreeTableOperator
cons public init(org.netbeans.jellytools.TreeTableOperator,javax.swing.JTree)
meth public javax.swing.JPopupMenu callPopupOnPaths(javax.swing.tree.TreePath[],int)
meth public org.netbeans.jemmy.operators.ComponentOperator getRealOperator()
meth public void expandPath(javax.swing.tree.TreePath)
meth public void scrollToPath(javax.swing.tree.TreePath)
supr org.netbeans.jemmy.operators.JTreeOperator
hfds oper

CLSS public org.netbeans.jellytools.WizardOperator
cons public init(java.lang.String)
cons public init(javax.swing.JDialog)
meth protected void checkPanel(java.lang.String)
meth public int stepsGetSelectedIndex()
meth public java.lang.String stepsGetSelectedValue()
meth public org.netbeans.jemmy.operators.JButtonOperator btBack()
meth public org.netbeans.jemmy.operators.JButtonOperator btFinish()
meth public org.netbeans.jemmy.operators.JButtonOperator btNext()
meth public org.netbeans.jemmy.operators.JListOperator lstSteps()
meth public void back()
meth public void finish()
meth public void next()
meth public void stepsWaitSelectedIndex(int)
meth public void stepsWaitSelectedValue(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds WAIT_TIME,_btBack,_btFinish,_btNext,_lstSteps

CLSS public org.netbeans.jellytools.actions.Action
cons public init(java.lang.String,java.lang.String)
cons public init(java.lang.String,java.lang.String,java.lang.String)
cons public init(java.lang.String,java.lang.String,java.lang.String,javax.swing.KeyStroke)
cons public init(java.lang.String,java.lang.String,java.lang.String,javax.swing.KeyStroke[])
cons public init(java.lang.String,java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init(java.lang.String,java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut[])
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init(java.lang.String,java.lang.String,javax.swing.KeyStroke)
cons public init(java.lang.String,java.lang.String,javax.swing.KeyStroke[])
cons public init(java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init(java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut[])
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
fld protected final static long AFTER_ACTION_WAIT_TIME = 0
fld protected final static long SELECTION_WAIT_TIME = 300
fld protected final static long WAIT_AFTER_SHORTCUT_TIMEOUT = 0
fld protected java.lang.Class systemActionClass
fld protected java.lang.String layerInstancePath
fld protected java.lang.String menuPath
fld protected java.lang.String popupPath
fld protected javax.swing.KeyStroke[] keystrokes
fld public final static int API_MODE = 2
fld public final static int MENU_MODE = 0
fld public final static int POPUP_MODE = 1
fld public final static int SHORTCUT_MODE = 3
innr public static Shortcut
meth protected void testNodes(org.netbeans.jellytools.nodes.Node[])
meth public boolean isEnabled()
meth public boolean isEnabled(org.netbeans.jellytools.nodes.Node)
meth public boolean isEnabled(org.netbeans.jellytools.nodes.Node[])
meth public boolean isEnabled(org.netbeans.jemmy.operators.ComponentOperator)
meth public int getDefaultMode()
meth public int setDefaultMode(int)
meth public java.lang.Class getSystemActionClass()
meth public java.lang.String getMenuPath()
meth public java.lang.String getPopupPath()
meth public javax.swing.KeyStroke[] getKeyStrokes()
meth public org.netbeans.jemmy.operators.Operator$StringComparator getComparator()
meth public void perform()
meth public void perform(org.netbeans.jellytools.nodes.Node)
meth public void perform(org.netbeans.jellytools.nodes.Node[])
meth public void perform(org.netbeans.jellytools.nodes.OutlineNode)
meth public void perform(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performAPI()
meth public void performAPI(org.netbeans.jellytools.nodes.Node)
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performAPI(org.netbeans.jellytools.nodes.OutlineNode)
meth public void performAPI(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performMenu()
meth public void performMenu(org.netbeans.jellytools.nodes.Node)
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.OutlineNode)
meth public void performMenu(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performPopup()
meth public void performPopup(org.netbeans.jellytools.nodes.Node)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.nodes.OutlineNode)
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut()
meth public void performShortcut(org.netbeans.jellytools.nodes.Node)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
meth public void performShortcut(org.netbeans.jellytools.nodes.OutlineNode)
meth public void performShortcut(org.netbeans.jemmy.operators.ComponentOperator)
meth public void setComparator(org.netbeans.jemmy.operators.Operator$StringComparator)
supr java.lang.Object
hfds comparator,defaultComparator,sequence

CLSS public static org.netbeans.jellytools.actions.Action$Shortcut
 outer org.netbeans.jellytools.actions.Action
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init(int)
cons public init(int,int)
fld protected int keyCode
fld protected int keyModifiers
meth public int getKeyCode()
meth public int getKeyModifiers()
meth public java.lang.String toString()
supr java.lang.Object

CLSS public org.netbeans.jellytools.actions.ActionNoBlock
cons public init(java.lang.String,java.lang.String)
cons public init(java.lang.String,java.lang.String,java.lang.String)
cons public init(java.lang.String,java.lang.String,java.lang.String,javax.swing.KeyStroke)
cons public init(java.lang.String,java.lang.String,java.lang.String,javax.swing.KeyStroke[])
cons public init(java.lang.String,java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init(java.lang.String,java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut[])
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init(java.lang.String,java.lang.String,javax.swing.KeyStroke)
cons public init(java.lang.String,java.lang.String,javax.swing.KeyStroke[])
cons public init(java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init(java.lang.String,java.lang.String,org.netbeans.jellytools.actions.Action$Shortcut[])
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public void performAPI()
meth public void performMenu()
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.nodes.OutlineNode)
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut()
supr org.netbeans.jellytools.actions.Action

CLSS public org.netbeans.jellytools.actions.AddLocaleAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds addPopup,localePopup

CLSS public org.netbeans.jellytools.actions.AttachWindowAction
cons public init(java.lang.String,java.lang.String)
cons public init(org.netbeans.jellytools.TopComponentOperator,java.lang.String)
fld public final static java.lang.String AS_LAST_TAB = "As a Last Tab"
fld public final static java.lang.String BOTTOM = "bottom"
fld public final static java.lang.String LEFT = "left"
fld public final static java.lang.String RIGHT = "right"
fld public final static java.lang.String TOP = "top"
meth public void performAPI(org.netbeans.jellytools.TopComponentOperator)
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performAPI(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds sideConstant,targetTopComponentName,targetTopComponentOperator,windowItem

CLSS public org.netbeans.jellytools.actions.BuildJavaProjectAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds buildProjectPopup

CLSS public org.netbeans.jellytools.actions.CleanJavaProjectAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds cleanProjectPopup

CLSS public org.netbeans.jellytools.actions.CloneViewAction
cons public init()
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds configureWindowItem,menuPath,popupPath,windowItem

CLSS public org.netbeans.jellytools.actions.CloseAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds closePopup

CLSS public org.netbeans.jellytools.actions.CloseAllDocumentsAction
cons public init()
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds menuPath,popupPath,windowItem

CLSS public org.netbeans.jellytools.actions.CloseViewAction
cons public init()
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds menuPath,popupPath,windowItem

CLSS public org.netbeans.jellytools.actions.CompileJavaAction
cons public init()
meth public void performMenu(org.netbeans.jellytools.nodes.Node)
meth public void performPopup(org.netbeans.jellytools.nodes.Node)
supr org.netbeans.jellytools.actions.Action
hfds compileItem,compileMenu,compilePopup,keystroke

CLSS public org.netbeans.jellytools.actions.CopyAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds copyMenu,copyPopup,keystroke

CLSS public org.netbeans.jellytools.actions.CustomizeAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds customizePopup

CLSS public org.netbeans.jellytools.actions.CutAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds cutMenu,cutPopup,keystroke

CLSS public org.netbeans.jellytools.actions.DebugProjectAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds KEYSTROKE,debugProjectMenu,debugProjectPopup

CLSS public org.netbeans.jellytools.actions.DeleteAction
cons public init()
meth public static void confirmDeletion()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds deleteMenu,deletePopup,keystroke

CLSS public org.netbeans.jellytools.actions.DockWindowAction
cons public init()
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds configureWindowItem,menuPath,popupPath,windowItem

CLSS public org.netbeans.jellytools.actions.DocumentsAction
cons public init()
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds menuPath,windowItem

CLSS public org.netbeans.jellytools.actions.EditAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds editPopup

CLSS public org.netbeans.jellytools.actions.ExploreFromHereAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds explorerPopup

CLSS public org.netbeans.jellytools.actions.FavoritesAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds allFilesMenu,keystroke

CLSS public org.netbeans.jellytools.actions.FilesViewAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds filesMenu

CLSS public org.netbeans.jellytools.actions.FindAction
cons public init()
meth public void performAPI()
meth public void performShortcut()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds findMenu,findPopup,keystroke

CLSS public org.netbeans.jellytools.actions.FindInFilesAction
cons public init()
meth public void performAPI()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds menu,popup

CLSS public org.netbeans.jellytools.actions.HelpAction
cons public init()
meth public static java.lang.String getHelpMenu()
supr org.netbeans.jellytools.actions.Action
hfds helpMenu,keystroke,popupPath

CLSS public org.netbeans.jellytools.actions.MaximizeWindowAction
cons public init()
meth public void performAPI()
meth public void performAPI(org.netbeans.jellytools.TopComponentOperator)
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds configureWindowItem,popupPathMaximize,windowItem,windowMaximizePath

CLSS public org.netbeans.jellytools.actions.NewFileAction
cons public init()
cons public init(java.lang.String)
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds keystroke,menuPathNewFile,popupPathNew,popupSubPath

CLSS public org.netbeans.jellytools.actions.NewProjectAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds menuPath

CLSS public org.netbeans.jellytools.actions.OpenAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds openPopup

CLSS public org.netbeans.jellytools.actions.OptionsViewAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds menu

CLSS public org.netbeans.jellytools.actions.OutputWindowViewAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,menu

CLSS public org.netbeans.jellytools.actions.PaletteViewAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds projectMenu

CLSS public org.netbeans.jellytools.actions.PasteAction
cons public init()
fld protected final static java.lang.String MENU
fld protected final static java.lang.String POPUP
fld protected final static java.lang.String SYSTEMCLASS = "org.openide.actions.PasteAction"
fld protected final static javax.swing.KeyStroke KEYSTROKE
supr org.netbeans.jellytools.actions.Action

CLSS public org.netbeans.jellytools.actions.PasteActionNoBlock
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock

CLSS public org.netbeans.jellytools.actions.ProjectViewAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds projectMenu

CLSS public org.netbeans.jellytools.actions.PropertiesAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,propertiesMenu,propertiesPopup

CLSS public org.netbeans.jellytools.actions.RenameAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds renamePopup

CLSS public org.netbeans.jellytools.actions.ReplaceAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,replaceMenu

CLSS public org.netbeans.jellytools.actions.RestoreWindowAction
cons public init()
meth public void performAPI()
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds configureWindowItem,popupPathMaximize,windowItem,windowMaximizePath

CLSS public org.netbeans.jellytools.actions.RuntimeViewAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds runtimeMenu

CLSS public org.netbeans.jellytools.actions.SaveAction
cons public init()
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public void performPopup(org.netbeans.jellytools.nodes.Node)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
supr org.netbeans.jellytools.actions.Action
hfds keystroke,saveMenu,savePopup

CLSS public org.netbeans.jellytools.actions.SaveAllAction
cons public init()
meth public void performAPI()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,saveAllMenu

CLSS public org.netbeans.jellytools.actions.SaveAsTemplateAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock

CLSS public org.netbeans.jellytools.actions.ShowDescriptionAreaAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds popupPath

CLSS public org.netbeans.jellytools.actions.SortByCategoryAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds popupPath

CLSS public org.netbeans.jellytools.actions.SortByNameAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds popupPath

CLSS public org.netbeans.jellytools.actions.UndockWindowAction
cons public init()
meth public void performAPI(org.netbeans.jellytools.nodes.Node[])
meth public void performMenu(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jellytools.TopComponentOperator)
meth public void performPopup(org.netbeans.jellytools.nodes.Node[])
meth public void performPopup(org.netbeans.jemmy.operators.ComponentOperator)
meth public void performShortcut(org.netbeans.jellytools.nodes.Node[])
supr org.netbeans.jellytools.actions.Action
hfds configureWindowItem,floatMenuPath,floatPopupPath,windowItem

CLSS public org.netbeans.jellytools.actions.ViewAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds viewPopup

CLSS public org.netbeans.jellytools.modules.debugger.AttachDialogOperator
cons public init()
fld public final static java.lang.String ITEM_SHARED_MEMORY_ATTACH = "SharedMemoryAttach (Attaches by shared memory to other VMs)"
fld public final static java.lang.String ITEM_SHARED_MEMORY_LISTEN = "SharedMemoryListen (Accepts shared memory connections initiated by other VMs)"
fld public final static java.lang.String ITEM_SOCKET_ATTACH = "SocketAttach (Attaches by socket to other VMs)"
fld public final static java.lang.String ITEM_SOCKET_LISTEN = "SocketListen (Accepts socket connections initiated by other VMs)"
meth public java.lang.String getHost()
meth public java.lang.String getName()
meth public java.lang.String getPort()
meth public java.lang.String getSelectedConnector()
meth public java.lang.String getSelectedDebugger()
meth public java.lang.String getTimeout()
meth public java.lang.String getTransport()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboConnector()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboDebugger()
meth public org.netbeans.jemmy.operators.JLabelOperator lblConnector()
meth public org.netbeans.jemmy.operators.JLabelOperator lblDebugger()
meth public org.netbeans.jemmy.operators.JLabelOperator lblHost()
meth public org.netbeans.jemmy.operators.JLabelOperator lblName()
meth public org.netbeans.jemmy.operators.JLabelOperator lblPort()
meth public org.netbeans.jemmy.operators.JLabelOperator lblTimeout()
meth public org.netbeans.jemmy.operators.JLabelOperator lblTransport()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtHost()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtName()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtPort()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtTimeout()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtTransport()
meth public static org.netbeans.jellytools.modules.debugger.AttachDialogOperator invoke()
meth public void selectConnector(java.lang.String)
meth public void selectDebugger(java.lang.String)
meth public void setHost(java.lang.String)
meth public void setName(java.lang.String)
meth public void setPort(java.lang.String)
meth public void setTimeout(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _cboConnector,_cboDebugger,_lblConnector,_lblDebugger,_lblHost,_lblName,_lblPort,_lblTimeoutMs,_lblTransport,_txtHost,_txtName,_txtPort,_txtTimeoutMs,_txtTransport

CLSS public org.netbeans.jellytools.modules.debugger.BreakpointsWindowOperator
cons public init()
meth public static org.netbeans.jellytools.modules.debugger.BreakpointsWindowOperator invoke()
meth public void deleteAll()
meth public void verify()
supr org.netbeans.jellytools.TopComponentOperator
hfds invokeAction,viewSubchooser

CLSS public org.netbeans.jellytools.modules.debugger.SessionsOperator
cons public init()
meth public org.netbeans.jellytools.TreeTableOperator treeTable()
meth public static org.netbeans.jellytools.modules.debugger.SessionsOperator invoke()
meth public void finishAll()
meth public void makeCurrent(java.lang.String)
supr org.netbeans.jellytools.TopComponentOperator
hfds invokeAction,viewSubchooser

CLSS public org.netbeans.jellytools.modules.debugger.SourcesOperator
cons public init()
meth public boolean isUsed(java.lang.String)
meth public org.netbeans.jellytools.TreeTableOperator treeTable()
meth public static org.netbeans.jellytools.modules.debugger.SourcesOperator invoke()
meth public void useSource(java.lang.String,boolean)
supr org.netbeans.jellytools.TopComponentOperator
hfds invokeAction,viewSubchooser

CLSS public org.netbeans.jellytools.modules.debugger.actions.ApplyCodeChangesAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.AttachDebuggerAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.BreakpointsWindowAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,menuPathBreakpoints

CLSS public org.netbeans.jellytools.modules.debugger.actions.ContinueAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.DebugJavaFileAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds DEBUG_ITEM,POPUP_PATH,keystroke

CLSS public org.netbeans.jellytools.modules.debugger.actions.DebugProjectAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds debugProjectPopup

CLSS public org.netbeans.jellytools.modules.debugger.actions.DeleteAllBreakpointsAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds popup

CLSS public org.netbeans.jellytools.modules.debugger.actions.FinishAllAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds popupPathFinishAll

CLSS public org.netbeans.jellytools.modules.debugger.actions.FinishDebuggerAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.MakeCurrentAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds popupPathMakeCurrent

CLSS public org.netbeans.jellytools.modules.debugger.actions.NewBreakpointAction
cons public init()
supr org.netbeans.jellytools.actions.ActionNoBlock
hfds keystroke,mainMenuPath,newBreakpointItem,runItem

CLSS public org.netbeans.jellytools.modules.debugger.actions.PauseAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.RunToCursorAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.SessionsAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,menuPathSessions

CLSS public org.netbeans.jellytools.modules.debugger.actions.SourcesAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,menuPathSources

CLSS public org.netbeans.jellytools.modules.debugger.actions.StepIntoAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.StepOutAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.StepOverAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.StepOverExpressionAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds keystroke,mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.TakeGUISnapshotAction
cons public init()
meth public void performMenu()
supr org.netbeans.jellytools.actions.Action
hfds mainMenuPath

CLSS public org.netbeans.jellytools.modules.debugger.actions.ToggleBreakpointAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds debugItem,keystroke,mainMenuPath,toggleBreakpointItem

CLSS public org.netbeans.jellytools.modules.form.ComponentInspectorOperator
cons public init()
meth public org.netbeans.jellytools.properties.PropertySheetOperator properties()
meth public org.netbeans.jellytools.properties.PropertySheetOperator properties(java.lang.String)
meth public org.netbeans.jemmy.operators.JTreeOperator treeComponents()
meth public void freezeNavigatorAndRun(java.lang.Runnable)
meth public void performAction(org.netbeans.jellytools.actions.Action,java.lang.String)
meth public void selectComponent(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NavigatorOperator
hfds _properties
hcls FormTreeComponentChooser

CLSS public org.netbeans.jellytools.modules.form.ComponentPaletteOperator
cons public init()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbAWT()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbBeans()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbSwingContainers()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbSwingControls()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbSwingMenus()
meth public org.netbeans.jemmy.operators.JCheckBoxOperator cbSwingWindows()
meth public void collapseAWT()
meth public void collapseBeans()
meth public void collapseSwingContainers()
meth public void collapseSwingControls()
meth public void collapseSwingMenus()
meth public void collapseSwingWindows()
meth public void expandAWT()
meth public void expandBeans()
meth public void expandSwingContainers()
meth public void expandSwingControls()
meth public void expandSwingMenus()
meth public void expandSwingWindows()
meth public void verify()
supr org.netbeans.jellytools.PaletteOperator
hfds _cbAWT,_cbBeans,_cbSwingContainers,_cbSwingControls,_cbSwingMenus,_cbSwingWindows

CLSS public org.netbeans.jellytools.modules.form.FormDesignerOperator
cons public init(java.lang.String)
cons public init(java.lang.String,int)
innr public final static FormDesignerSubchooser
meth public java.awt.Component findComponent(java.lang.Class)
meth public java.awt.Component findComponent(java.lang.Class,int)
meth public java.awt.Component findComponent(org.netbeans.jemmy.ComponentChooser)
meth public java.awt.Component findComponent(org.netbeans.jemmy.ComponentChooser,int)
meth public java.awt.Point convertCoords(java.awt.Component)
meth public java.awt.Point convertCoords(java.awt.Component,java.awt.Point)
meth public org.netbeans.jellytools.EditorOperator editor()
meth public org.netbeans.jemmy.operators.ComponentOperator handleLayer()
meth public org.netbeans.jemmy.operators.ContainerOperator componentLayer()
meth public org.netbeans.jemmy.operators.ContainerOperator fakePane()
meth public org.netbeans.jemmy.operators.JButtonOperator btPreviewForm()
meth public org.netbeans.jemmy.operators.JFrameOperator previewForm()
meth public org.netbeans.jemmy.operators.JFrameOperator previewForm(java.lang.String)
meth public org.netbeans.jemmy.operators.JToggleButtonOperator tbConnectionMode()
meth public org.netbeans.jemmy.operators.JToggleButtonOperator tbDesign()
meth public org.netbeans.jemmy.operators.JToggleButtonOperator tbSelectionMode()
meth public org.netbeans.jemmy.operators.JToggleButtonOperator tbSource()
meth public void clickOnComponent(java.awt.Component)
meth public void clickOnComponent(java.awt.Component,java.awt.Point)
meth public void connectionMode()
meth public void design()
meth public void selectionMode()
meth public void source()
meth public void verify()
supr org.netbeans.jellytools.TopComponentOperator
hfds _btPreviewForm,_componentLayer,_fakePane,_handleLayer,_tbConnectionMode,_tbDesign,_tbSelectionMode,_tbSource
hcls ComponentLayerChooser,FakePaneChooser,HandleLayerChooser,ToolTipChooser

CLSS public final static org.netbeans.jellytools.modules.form.FormDesignerOperator$FormDesignerSubchooser
 outer org.netbeans.jellytools.modules.form.FormDesignerOperator
cons public init()
intf org.netbeans.jemmy.ComponentChooser
meth public boolean checkComponent(java.awt.Component)
meth public java.lang.String getDescription()
supr java.lang.Object

CLSS public org.netbeans.jellytools.modules.form.actions.InspectorAction
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds inspectorMenu

CLSS public org.netbeans.jellytools.modules.form.properties.editors.FormCustomEditorOperator
cons public init(java.lang.String)
meth public java.lang.String getMode()
meth public org.netbeans.jemmy.operators.JButtonOperator btDefault()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboMode()
meth public void setDefault()
meth public void setMode(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _btDefault,_cboMode

CLSS public org.netbeans.jellytools.modules.form.properties.editors.MethodPickerOperator
cons public init()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboComponent()
meth public org.netbeans.jemmy.operators.JLabelOperator lblComponent()
meth public org.netbeans.jemmy.operators.JLabelOperator lblMethods()
meth public org.netbeans.jemmy.operators.JListOperator lstMethods()
meth public void setComponent(java.lang.String)
meth public void setMethods(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _cboComponent,_lblComponent,_lblMethods,_lstMethods

CLSS public org.netbeans.jellytools.modules.form.properties.editors.ParametersPickerOperator
cons public init(java.lang.String)
meth public org.netbeans.jemmy.operators.JButtonOperator btSelectMethod()
meth public org.netbeans.jemmy.operators.JButtonOperator btSelectProperty()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboComponent()
meth public org.netbeans.jemmy.operators.JLabelOperator lblGetParameterFrom()
meth public org.netbeans.jemmy.operators.JRadioButtonOperator rbComponent()
meth public org.netbeans.jemmy.operators.JRadioButtonOperator rbMethodCall()
meth public org.netbeans.jemmy.operators.JRadioButtonOperator rbProperty()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtMethodCall()
meth public org.netbeans.jemmy.operators.JTextFieldOperator txtProperty()
meth public void component()
meth public void methodCall()
meth public void property()
meth public void selectMethod()
meth public void selectProperty()
meth public void setComponent(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.modules.form.properties.editors.FormCustomEditorOperator
hfds _btSelectMethod,_btSelectProperty,_cboComponent,_lblGetParameterFrom,_rbComponent,_rbMethodCall,_rbProperty,_rbUserCode,_txtMethodCall,_txtProperty,_txtUserCode

CLSS public org.netbeans.jellytools.modules.form.properties.editors.PropertyPickerOperator
cons public init()
meth public org.netbeans.jemmy.operators.JComboBoxOperator cboComponent()
meth public org.netbeans.jemmy.operators.JLabelOperator lblComponent()
meth public org.netbeans.jemmy.operators.JLabelOperator lblProperties()
meth public org.netbeans.jemmy.operators.JListOperator lstProperties()
meth public void setComponent(java.lang.String)
meth public void setProperty(java.lang.String)
meth public void verify()
supr org.netbeans.jellytools.NbDialogOperator
hfds _cboComponent,_lblComponent,_lblProperties,_lstProperties

CLSS public org.netbeans.jellytools.modules.freeform.actions.RedeployFreeformAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds redeployProject

CLSS public org.netbeans.jellytools.modules.freeform.actions.RunFreeformAction
cons public init()
supr org.netbeans.jellytools.actions.Action
hfds runProject

CLSS public org.netbeans.jellytools.modules.freeform.nodes.FreeformProjectNode
cons public init(java.lang.String)
meth public void customAction(java.lang.String)
meth public void redeploy()
meth public void run()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.ProjectRootNode
hfds redeployFreeformAction,runFreeformAction

CLSS public org.netbeans.jellytools.modules.java.editor.GenerateCodeOperator
cons public init()
fld public final static java.lang.String DELEGATE_METHOD
fld public final static java.lang.String GENERATE_CONSTRUCTOR
fld public final static java.lang.String GENERATE_EQUALS
fld public final static java.lang.String GENERATE_EQUALS_HASHCODE
fld public final static java.lang.String GENERATE_GETTER
fld public final static java.lang.String GENERATE_GETTER_SETTER
fld public final static java.lang.String GENERATE_HASHCODE
fld public final static java.lang.String GENERATE_SETTER
fld public final static java.lang.String IMPLEMENT_METHOD
fld public final static java.lang.String OVERRIDE_METHOD
meth public !varargs static boolean checkItems(org.netbeans.jellytools.EditorOperator,java.lang.String[])
meth public !varargs static boolean containsItems(org.netbeans.jellytools.EditorOperator,java.lang.String[])
meth public static boolean openDialog(java.lang.String,org.netbeans.jellytools.EditorOperator)
supr java.lang.Object

CLSS public org.netbeans.jellytools.nodes.ClassNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void properties()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds propertiesAction

CLSS public org.netbeans.jellytools.nodes.FolderNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void compile()
meth public void copy()
meth public void cut()
meth public void delete()
meth public void exploreFromHere()
meth public void find()
meth public void newFile()
meth public void newFile(java.lang.String)
meth public void paste()
meth public void properties()
meth public void rename()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds compileAction,copyAction,cutAction,deleteAction,exploreFromHereAction,findAction,newFileAction,pasteAction,propertiesAction,renameAction

CLSS public org.netbeans.jellytools.nodes.FormNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void compile()
meth public void copy()
meth public void cut()
meth public void delete()
meth public void edit()
meth public void open()
meth public void paste()
meth public void properties()
meth public void saveAsTemplate()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds compileAction,copyAction,cutAction,deleteAction,editAction,openAction,pasteAction,propertiesAction,saveAsTemplateAction

CLSS public org.netbeans.jellytools.nodes.HTMLNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void copy()
meth public void cut()
meth public void delete()
meth public void open()
meth public void paste()
meth public void properties()
meth public void rename()
meth public void saveAsTemplate()
meth public void verifyPopup()
meth public void view()
supr org.netbeans.jellytools.nodes.Node
hfds copyAction,cutAction,deleteAction,openAction,pasteAction,propertiesAction,saveAsTemplateAction,viewAction

CLSS public org.netbeans.jellytools.nodes.ImageNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void copy()
meth public void cut()
meth public void delete()
meth public void open()
meth public void paste()
meth public void properties()
meth public void rename()
meth public void saveAsTemplate()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds copyAction,cutAction,deleteAction,openAction,pasteAction,propertiesAction,saveAsTemplateAction

CLSS public org.netbeans.jellytools.nodes.JavaNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
meth public void copy()
meth public void cut()
meth public void delete()
meth public void open()
meth public void paste()
meth public void properties()
meth public void saveAsTemplate()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds copyAction,cutAction,deleteAction,openAction,pasteAction,propertiesAction,saveAsTemplateAction

CLSS public org.netbeans.jellytools.nodes.JavaProjectRootNode
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
meth public void buildProject()
meth public void cleanProject()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.ProjectRootNode
hfds buildProjectAction,cleanProjectAction

CLSS public org.netbeans.jellytools.nodes.Node
cons public init(org.netbeans.jellytools.nodes.Node,int)
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
fld protected java.lang.String stringPath
fld protected javax.swing.tree.TreePath treePath
fld protected org.netbeans.jemmy.operators.JTreeOperator treeOperator
meth public boolean isChildPresent(java.lang.String)
meth public boolean isCollapsed()
meth public boolean isExpanded()
meth public boolean isLeaf()
meth public boolean isLink()
meth public boolean isPresent()
meth public java.lang.Object getOpenideNode()
meth public java.lang.String getParentPath()
meth public java.lang.String getPath()
meth public java.lang.String getText()
meth public java.lang.String[] getChildren()
meth public javax.swing.tree.TreePath getTreePath()
meth public org.netbeans.jemmy.operators.JPopupMenuOperator callPopup()
meth public org.netbeans.jemmy.operators.JTreeOperator tree()
meth public org.netbeans.jemmy.operators.Operator$StringComparator getComparator()
meth public void addSelectionPath()
meth public void collapse()
meth public void expand()
meth public void performAPIAction(java.lang.String)
meth public void performAPIActionNoBlock(java.lang.String)
meth public void performMenuAction(java.lang.String)
meth public void performMenuActionNoBlock(java.lang.String)
meth public void performPopupAction(java.lang.String)
meth public void performPopupActionNoBlock(java.lang.String)
meth public void select()
meth public void setComparator(org.netbeans.jemmy.operators.Operator$StringComparator)
meth public void verifyPopup(java.lang.String)
meth public void verifyPopup(java.lang.String[])
meth public void verifyPopup(org.netbeans.jellytools.actions.Action[])
meth public void waitChildNotPresent(java.lang.String)
meth public void waitCollapsed()
meth public void waitExpanded()
meth public void waitNotPresent()
supr java.lang.Object
hfds comparator,linkSuffix
hcls NodesJTreeOperator,StringArraySubPathChooser

CLSS public final org.netbeans.jellytools.nodes.OutlineNode
cons public init(org.netbeans.jellytools.OutlineOperator,java.lang.String)
cons public init(org.netbeans.jellytools.OutlineOperator,javax.swing.tree.TreePath)
cons public init(org.netbeans.jellytools.nodes.OutlineNode,java.lang.String)
meth public boolean isLeaf()
meth public javax.swing.tree.TreePath getTreePath()
meth public org.netbeans.jellytools.OutlineOperator getOutline()
meth public org.netbeans.jemmy.operators.JPopupMenuOperator callPopup()
meth public void expand()
meth public void performAPIAction(java.lang.String)
meth public void performAPIActionNoBlock(java.lang.String)
meth public void performMenuAction(java.lang.String)
meth public void performMenuActionNoBlock(java.lang.String)
meth public void performPopupAction(java.lang.String)
meth public void performPopupActionNoBlock(java.lang.String)
meth public void select()
supr java.lang.Object
hfds _outline,_treePath

CLSS public org.netbeans.jellytools.nodes.ProjectRootNode
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
meth public void debug()
meth public void find()
meth public void properties()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds debugProjectAction,findAction,propertiesAction

CLSS public org.netbeans.jellytools.nodes.PropertiesNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void addLocale()
meth public void copy()
meth public void customize()
meth public void cut()
meth public void delete()
meth public void edit()
meth public void open()
meth public void paste()
meth public void properties()
meth public void rename()
meth public void saveAsTemplate()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds addLocaleAction,copyAction,customizeAction,cutAction,deleteAction,editAction,openAction,pasteAction,propertiesAction,renameAction,saveAsTemplateAction

CLSS public org.netbeans.jellytools.nodes.SourcePackagesNode
cons public init(java.lang.String)
cons public init(org.netbeans.jellytools.nodes.Node)
meth public void exploreFromHere()
meth public void find()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds SOURCE_PACKAGES_LABEL,exploreFromHereAction,findAction

CLSS public org.netbeans.jellytools.nodes.URLNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void copy()
meth public void cut()
meth public void delete()
meth public void open()
meth public void paste()
meth public void properties()
meth public void rename()
meth public void saveAsTemplate()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds copyAction,cutAction,deleteAction,openAction,pasteAction,propertiesAction,renameAction,saveAsTemplateAction

CLSS public org.netbeans.jellytools.nodes.UnrecognizedNode
cons public init(org.netbeans.jellytools.nodes.Node,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.JTreeOperator,javax.swing.tree.TreePath)
meth public void copy()
meth public void cut()
meth public void delete()
meth public void open()
meth public void paste()
meth public void properties()
meth public void rename()
meth public void saveAsTemplate()
meth public void verifyPopup()
supr org.netbeans.jellytools.nodes.Node
hfds copyAction,cutAction,deleteAction,openAction,pasteAction,propertiesAction,renameAction,saveAsTemplateAction

CLSS public org.netbeans.jellytools.testutils.JavaNodeUtils
cons public init()
meth public static void closeSafeDeleteDialog()
meth public static void performSafeDelete(org.netbeans.jellytools.nodes.Node)
supr org.netbeans.jellytools.testutils.NodeUtils

CLSS public org.netbeans.jellytools.testutils.NodeUtils
cons public init()
meth public static void closeConfirmDeleteDialog()
meth public static void closeProperties(java.lang.String)
meth public static void closeRenameDialog()
meth public static void performDelete(org.netbeans.jellytools.nodes.Node)
meth public static void testClipboard(java.lang.Object)
supr java.lang.Object

CLSS public abstract interface org.netbeans.jemmy.ComponentChooser
meth public abstract boolean checkComponent(java.awt.Component)
meth public abstract java.lang.String getDescription()

CLSS public abstract interface org.netbeans.jemmy.Outputable
meth public abstract org.netbeans.jemmy.TestOut getOutput()
meth public abstract void setOutput(org.netbeans.jemmy.TestOut)

CLSS public abstract interface org.netbeans.jemmy.Timeoutable
meth public abstract org.netbeans.jemmy.Timeouts getTimeouts()
meth public abstract void setTimeouts(org.netbeans.jemmy.Timeouts)

CLSS public abstract interface org.netbeans.jemmy.drivers.Driver
meth public abstract java.lang.Class[] getSupported()

CLSS public abstract interface org.netbeans.jemmy.drivers.MouseDriver
meth public abstract void clickMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int,int,org.netbeans.jemmy.Timeout)
meth public abstract void dragMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int)
meth public abstract void dragNDrop(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int,int,int,org.netbeans.jemmy.Timeout,org.netbeans.jemmy.Timeout)
meth public abstract void enterMouse(org.netbeans.jemmy.operators.ComponentOperator)
meth public abstract void exitMouse(org.netbeans.jemmy.operators.ComponentOperator)
meth public abstract void moveMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int)
meth public abstract void pressMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int)
meth public abstract void releaseMouse(org.netbeans.jemmy.operators.ComponentOperator,int,int,int,int)

CLSS public abstract org.netbeans.jemmy.drivers.SupportiveDriver
cons public init(java.lang.Class[])
intf org.netbeans.jemmy.drivers.Driver
meth public java.lang.Class[] getSupported()
meth public void checkSupported(org.netbeans.jemmy.operators.ComponentOperator)
supr java.lang.Object
hfds supported

CLSS public org.netbeans.jemmy.operators.ComponentOperator
cons public init(java.awt.Component)
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser,int)
fld public final static java.lang.String HEIGHT_DPROP = "Height"
fld public final static java.lang.String IS_SHOWING_DPROP = "Showing"
fld public final static java.lang.String IS_VISIBLE_DPROP = "Visible"
fld public final static java.lang.String NAME_DPROP = "Name:"
fld public final static java.lang.String WIDTH_DPROP = "Width"
fld public final static java.lang.String X_DPROP = "X"
fld public final static java.lang.String Y_DPROP = "Y"
intf org.netbeans.jemmy.Outputable
intf org.netbeans.jemmy.Timeoutable
meth protected static java.awt.Component waitComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth protected static java.awt.Component waitComponent(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser,int)
meth public boolean contains(int,int)
meth public boolean contains(java.awt.Point)
meth public boolean hasFocus()
meth public boolean imageUpdate(java.awt.Image,int,int,int,int,int)
meth public boolean isDisplayable()
meth public boolean isDoubleBuffered()
meth public boolean isEnabled()
meth public boolean isFocusTraversable()
meth public boolean isLightweight()
meth public boolean isOpaque()
meth public boolean isShowing()
meth public boolean isValid()
meth public boolean isVisible()
meth public boolean prepareImage(java.awt.Image,int,int,java.awt.image.ImageObserver)
meth public boolean prepareImage(java.awt.Image,java.awt.image.ImageObserver)
meth public float getAlignmentX()
meth public float getAlignmentY()
meth public int checkImage(java.awt.Image,int,int,java.awt.image.ImageObserver)
meth public int checkImage(java.awt.Image,java.awt.image.ImageObserver)
meth public int getCenterX()
meth public int getCenterXForClick()
meth public int getCenterY()
meth public int getCenterYForClick()
meth public int getHeight()
meth public int getWidth()
meth public int getX()
meth public int getY()
meth public java.awt.Color getBackground()
meth public java.awt.Color getForeground()
meth public java.awt.Component getComponentAt(int,int)
meth public java.awt.Component getComponentAt(java.awt.Point)
meth public java.awt.Component getSource()
meth public java.awt.ComponentOrientation getComponentOrientation()
meth public java.awt.Container getContainer(org.netbeans.jemmy.ComponentChooser)
meth public java.awt.Container getParent()
meth public java.awt.Container[] getContainers()
meth public java.awt.Cursor getCursor()
meth public java.awt.Dimension getMaximumSize()
meth public java.awt.Dimension getMinimumSize()
meth public java.awt.Dimension getPreferredSize()
meth public java.awt.Dimension getSize()
meth public java.awt.Dimension getSize(java.awt.Dimension)
meth public java.awt.Font getFont()
meth public java.awt.FontMetrics getFontMetrics(java.awt.Font)
meth public java.awt.Graphics getGraphics()
meth public java.awt.Image createImage(int,int)
meth public java.awt.Image createImage(java.awt.image.ImageProducer)
meth public java.awt.Point getLocation()
meth public java.awt.Point getLocation(java.awt.Point)
meth public java.awt.Point getLocationOnScreen()
meth public java.awt.Rectangle getBounds()
meth public java.awt.Rectangle getBounds(java.awt.Rectangle)
meth public java.awt.Toolkit getToolkit()
meth public java.awt.Window getWindow()
meth public java.awt.dnd.DropTarget getDropTarget()
meth public java.awt.im.InputContext getInputContext()
meth public java.awt.im.InputMethodRequests getInputMethodRequests()
meth public java.awt.image.ColorModel getColorModel()
meth public java.lang.Object getTreeLock()
meth public java.lang.String getName()
meth public java.util.Hashtable getDump()
meth public java.util.Locale getLocale()
meth public org.netbeans.jemmy.EventDispatcher getEventDispatcher()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public org.netbeans.jemmy.Timeouts getTimeouts()
meth public static java.awt.Component findComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Component findComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public static java.awt.Component waitComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Component waitComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public static java.awt.Component[] findComponents(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public void activateWindow()
meth public void add(java.awt.PopupMenu)
meth public void addComponentListener(java.awt.event.ComponentListener)
meth public void addFocusListener(java.awt.event.FocusListener)
meth public void addInputMethodListener(java.awt.event.InputMethodListener)
meth public void addKeyListener(java.awt.event.KeyListener)
meth public void addMouseListener(java.awt.event.MouseListener)
meth public void addMouseMotionListener(java.awt.event.MouseMotionListener)
meth public void addNotify()
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void clickForPopup()
meth public void clickForPopup(int)
meth public void clickForPopup(int,int)
meth public void clickForPopup(int,int,int)
meth public void clickMouse()
meth public void clickMouse(int)
meth public void clickMouse(int,int)
meth public void clickMouse(int,int,int)
meth public void clickMouse(int,int,int,int)
meth public void clickMouse(int,int,int,int,int)
meth public void clickMouse(int,int,int,int,int,boolean)
meth public void copyEnvironment(org.netbeans.jemmy.operators.Operator)
meth public void dispatchEvent(java.awt.AWTEvent)
meth public void doLayout()
meth public void dragMouse(int,int)
meth public void dragMouse(int,int,int)
meth public void dragMouse(int,int,int,int)
meth public void dragNDrop(int,int,int,int)
meth public void dragNDrop(int,int,int,int,int)
meth public void dragNDrop(int,int,int,int,int,int)
meth public void enableInputMethods(boolean)
meth public void enterMouse()
meth public void exitMouse()
meth public void getFocus()
meth public void invalidate()
meth public void list()
meth public void list(java.io.PrintStream)
meth public void list(java.io.PrintStream,int)
meth public void list(java.io.PrintWriter)
meth public void list(java.io.PrintWriter,int)
meth public void makeComponentVisible()
meth public void moveMouse(int,int)
meth public void paint(java.awt.Graphics)
meth public void paintAll(java.awt.Graphics)
meth public void pressKey(int)
meth public void pressKey(int,int)
meth public void pressMouse()
meth public void pressMouse(int,int)
meth public void print(java.awt.Graphics)
meth public void printAll(java.awt.Graphics)
meth public void pushKey(int)
meth public void pushKey(int,int)
meth public void releaseKey(int)
meth public void releaseKey(int,int)
meth public void releaseMouse()
meth public void releaseMouse(int,int)
meth public void remove(java.awt.MenuComponent)
meth public void removeComponentListener(java.awt.event.ComponentListener)
meth public void removeFocusListener(java.awt.event.FocusListener)
meth public void removeInputMethodListener(java.awt.event.InputMethodListener)
meth public void removeKeyListener(java.awt.event.KeyListener)
meth public void removeMouseListener(java.awt.event.MouseListener)
meth public void removeMouseMotionListener(java.awt.event.MouseMotionListener)
meth public void removeNotify()
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void repaint()
meth public void repaint(int,int,int,int)
meth public void repaint(long)
meth public void repaint(long,int,int,int,int)
meth public void requestFocus()
meth public void setBackground(java.awt.Color)
meth public void setBounds(int,int,int,int)
meth public void setBounds(java.awt.Rectangle)
meth public void setComponentOrientation(java.awt.ComponentOrientation)
meth public void setCursor(java.awt.Cursor)
meth public void setDropTarget(java.awt.dnd.DropTarget)
meth public void setEnabled(boolean)
meth public void setFont(java.awt.Font)
meth public void setForeground(java.awt.Color)
meth public void setLocale(java.util.Locale)
meth public void setLocation(int,int)
meth public void setLocation(java.awt.Point)
meth public void setName(java.lang.String)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void setSize(int,int)
meth public void setSize(java.awt.Dimension)
meth public void setTimeouts(org.netbeans.jemmy.Timeouts)
meth public void setVisible(boolean)
meth public void transferFocus()
meth public void typeKey(char)
meth public void typeKey(char,int)
meth public void typeKey(int,char,int)
meth public void typedKey(char,int)
meth public void update(java.awt.Graphics)
meth public void validate()
meth public void waitComponentEnabled() throws java.lang.InterruptedException
meth public void waitComponentShowing(boolean)
meth public void waitComponentVisible(boolean)
meth public void waitHasFocus()
meth public void wtComponentEnabled()
supr org.netbeans.jemmy.operators.Operator
hfds AFTER_DRAG_TIMEOUT,BEFORE_DRAG_TIMEOUT,MOUSE_CLICK_TIMEOUT,PUSH_KEY_TIMEOUT,WAIT_COMPONENT_ENABLED_TIMEOUT,WAIT_COMPONENT_TIMEOUT,WAIT_FOCUS_TIMEOUT,WAIT_STATE_TIMEOUT,dispatcher,fDriver,kDriver,mDriver,output,source,timeouts
hcls VisibleComponentFinder

CLSS public org.netbeans.jemmy.operators.ContainerOperator<%0 extends java.awt.Container>
cons public init(java.awt.Container)
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser,int)
innr public static ContainerFinder
intf org.netbeans.jemmy.Outputable
intf org.netbeans.jemmy.Timeoutable
meth public boolean isAncestorOf(java.awt.Component)
meth public int getComponentCount()
meth public java.awt.Component add(java.awt.Component)
meth public java.awt.Component add(java.awt.Component,int)
meth public java.awt.Component add(java.lang.String,java.awt.Component)
meth public java.awt.Component findComponentAt(int,int)
meth public java.awt.Component findComponentAt(java.awt.Point)
meth public java.awt.Component findSubComponent(org.netbeans.jemmy.ComponentChooser)
meth public java.awt.Component findSubComponent(org.netbeans.jemmy.ComponentChooser,int)
meth public java.awt.Component getComponent(int)
meth public java.awt.Component waitSubComponent(org.netbeans.jemmy.ComponentChooser)
meth public java.awt.Component waitSubComponent(org.netbeans.jemmy.ComponentChooser,int)
meth public java.awt.Component[] getComponents()
meth public java.awt.Insets getInsets()
meth public java.awt.LayoutManager getLayout()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public org.netbeans.jemmy.Timeouts getTimeouts()
meth public org.netbeans.jemmy.operators.ComponentOperator createSubOperator(org.netbeans.jemmy.ComponentChooser)
meth public org.netbeans.jemmy.operators.ComponentOperator createSubOperator(org.netbeans.jemmy.ComponentChooser,int)
meth public static java.awt.Container findContainer(java.awt.Container)
meth public static java.awt.Container findContainer(java.awt.Container,int)
meth public static java.awt.Container findContainer(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Container findContainer(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public static java.awt.Container findContainerUnder(java.awt.Component)
meth public static java.awt.Container findContainerUnder(java.awt.Component,org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Container waitContainer(java.awt.Container)
meth public static java.awt.Container waitContainer(java.awt.Container,int)
meth public static java.awt.Container waitContainer(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Container waitContainer(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public void add(java.awt.Component,java.lang.Object)
meth public void add(java.awt.Component,java.lang.Object,int)
meth public void addContainerListener(java.awt.event.ContainerListener)
meth public void paintComponents(java.awt.Graphics)
meth public void printComponents(java.awt.Graphics)
meth public void remove(int)
meth public void remove(java.awt.Component)
meth public void removeAll()
meth public void removeContainerListener(java.awt.event.ContainerListener)
meth public void setLayout(java.awt.LayoutManager)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void setTimeouts(org.netbeans.jemmy.Timeouts)
supr org.netbeans.jemmy.operators.ComponentOperator
hfds WAIT_SUBCOMPONENT_TIMEOUT,output,searcher,timeouts

CLSS public org.netbeans.jemmy.operators.DialogOperator
cons public init()
cons public init(int)
cons public init(java.awt.Dialog)
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(java.lang.String,int,org.netbeans.jemmy.operators.Operator)
cons public init(org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.ComponentChooser,int)
cons public init(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.operators.Operator)
cons public init(org.netbeans.jemmy.operators.WindowOperator)
cons public init(org.netbeans.jemmy.operators.WindowOperator,int)
cons public init(org.netbeans.jemmy.operators.WindowOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.WindowOperator,java.lang.String,int)
cons public init(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser,int)
fld public final static java.lang.String IS_MODAL_DPROP = "Modal"
fld public final static java.lang.String IS_RESIZABLE_DPROP = "Resizable"
fld public final static java.lang.String TITLE_DPROP = "Title"
innr public static DialogByTitleFinder
innr public static DialogFinder
meth protected static java.awt.Dialog waitDialog(java.awt.Window,org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth protected static java.awt.Dialog waitDialog(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth protected static java.awt.Dialog waitDialog(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser,int)
meth public boolean isModal()
meth public boolean isResizable()
meth public java.lang.String getTitle()
meth public java.util.Hashtable getDump()
meth public void setModal(boolean)
meth public void setResizable(boolean)
meth public void setTitle(java.lang.String)
meth public void waitTitle(java.lang.String)
supr org.netbeans.jemmy.operators.WindowOperator

CLSS public org.netbeans.jemmy.operators.FrameOperator
cons public init()
cons public init(int)
cons public init(java.awt.Frame)
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(java.lang.String,int,org.netbeans.jemmy.operators.Operator)
cons public init(org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.ComponentChooser,int)
cons public init(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.operators.Operator)
fld public final static java.lang.String IS_RESIZABLE_DPROP = "Resizable"
fld public final static java.lang.String STATE_DPROP = "State"
fld public final static java.lang.String STATE_ICONIFIED_DPROP_VALUE = "ICONIFIED"
fld public final static java.lang.String STATE_NORMAL_DPROP_VALUE = "NORMAL"
fld public final static java.lang.String TITLE_DPROP = "Title"
innr public static FrameByTitleFinder
innr public static FrameFinder
intf org.netbeans.jemmy.Outputable
meth protected static java.awt.Frame waitFrame(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth public boolean isResizable()
meth public int getState()
meth public java.awt.Image getIconImage()
meth public java.awt.MenuBar getMenuBar()
meth public java.lang.String getTitle()
meth public java.util.Hashtable getDump()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public void copyEnvironment(org.netbeans.jemmy.operators.Operator)
meth public void deiconify()
meth public void demaximize()
meth public void iconify()
meth public void maximize()
meth public void setIconImage(java.awt.Image)
meth public void setMenuBar(java.awt.MenuBar)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void setResizable(boolean)
meth public void setState(int)
meth public void setTitle(java.lang.String)
meth public void waitState(int)
meth public void waitTitle(java.lang.String)
supr org.netbeans.jemmy.operators.WindowOperator
hfds driver,output

CLSS public org.netbeans.jemmy.operators.JComponentOperator
cons public init(javax.swing.JComponent)
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser,int)
fld public final static java.lang.String A11Y_DATA = "Accessible data (yes/no)"
fld public final static java.lang.String A11Y_DESCRIPTION_DPROP = "Accessible decription"
fld public final static java.lang.String A11Y_NAME_DPROP = "Accessible name"
fld public final static java.lang.String TOOLTIP_TEXT_DPROP = "Tooltip text"
innr public static JComponentByTipFinder
innr public static JComponentFinder
intf org.netbeans.jemmy.Outputable
intf org.netbeans.jemmy.Timeoutable
meth public boolean getAutoscrolls()
meth public boolean isFocusCycleRoot()
meth public boolean isManagingFocus()
meth public boolean isOptimizedDrawingEnabled()
meth public boolean isPaintingTile()
meth public boolean isRequestFocusEnabled()
meth public boolean isValidateRoot()
meth public boolean requestDefaultFocus()
meth public int getCenterXForClick()
meth public int getCenterYForClick()
meth public int getConditionForKeyStroke(javax.swing.KeyStroke)
meth public int getDebugGraphicsOptions()
meth public java.awt.Component getNextFocusableComponent()
meth public java.awt.Container getTopLevelAncestor()
meth public java.awt.Insets getInsets(java.awt.Insets)
meth public java.awt.Point getToolTipLocation(java.awt.event.MouseEvent)
meth public java.awt.Rectangle getVisibleRect()
meth public java.awt.event.ActionListener getActionForKeyStroke(javax.swing.KeyStroke)
meth public java.lang.Object getClientProperty(java.lang.Object)
meth public java.lang.String getToolTipText()
meth public java.lang.String getToolTipText(java.awt.event.MouseEvent)
meth public java.lang.String getUIClassID()
meth public java.util.Hashtable getDump()
meth public javax.accessibility.AccessibleContext getAccessibleContext()
meth public javax.swing.JRootPane getRootPane()
meth public javax.swing.JToolTip createToolTip()
meth public javax.swing.JToolTip showToolTip()
meth public javax.swing.JToolTip waitToolTip()
meth public javax.swing.KeyStroke[] getRegisteredKeyStrokes()
meth public javax.swing.border.Border getBorder()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public org.netbeans.jemmy.Timeouts getTimeouts()
meth public org.netbeans.jemmy.operators.ContainerOperator getWindowContainerOperator()
meth public static javax.swing.JComponent findJComponent(java.awt.Container,java.lang.String,boolean,boolean)
meth public static javax.swing.JComponent findJComponent(java.awt.Container,java.lang.String,boolean,boolean,int)
meth public static javax.swing.JComponent findJComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JComponent findJComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public static javax.swing.JComponent waitJComponent(java.awt.Container,java.lang.String,boolean,boolean)
meth public static javax.swing.JComponent waitJComponent(java.awt.Container,java.lang.String,boolean,boolean,int)
meth public static javax.swing.JComponent waitJComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JComponent waitJComponent(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public void addAncestorListener(javax.swing.event.AncestorListener)
meth public void addVetoableChangeListener(java.beans.VetoableChangeListener)
meth public void computeVisibleRect(java.awt.Rectangle)
meth public void firePropertyChange(java.lang.String,boolean,boolean)
meth public void firePropertyChange(java.lang.String,byte,byte)
meth public void firePropertyChange(java.lang.String,char,char)
meth public void firePropertyChange(java.lang.String,double,double)
meth public void firePropertyChange(java.lang.String,float,float)
meth public void firePropertyChange(java.lang.String,int,int)
meth public void firePropertyChange(java.lang.String,long,long)
meth public void firePropertyChange(java.lang.String,short,short)
meth public void grabFocus()
meth public void paintImmediately(int,int,int,int)
meth public void paintImmediately(java.awt.Rectangle)
meth public void putClientProperty(java.lang.Object,java.lang.Object)
meth public void registerKeyboardAction(java.awt.event.ActionListener,java.lang.String,javax.swing.KeyStroke,int)
meth public void registerKeyboardAction(java.awt.event.ActionListener,javax.swing.KeyStroke,int)
meth public void removeAncestorListener(javax.swing.event.AncestorListener)
meth public void removeVetoableChangeListener(java.beans.VetoableChangeListener)
meth public void repaint(java.awt.Rectangle)
meth public void resetKeyboardActions()
meth public void revalidate()
meth public void scrollRectToVisible(java.awt.Rectangle)
meth public void setAlignmentX(float)
meth public void setAlignmentY(float)
meth public void setAutoscrolls(boolean)
meth public void setBorder(javax.swing.border.Border)
meth public void setDebugGraphicsOptions(int)
meth public void setDoubleBuffered(boolean)
meth public void setMaximumSize(java.awt.Dimension)
meth public void setMinimumSize(java.awt.Dimension)
meth public void setNextFocusableComponent(java.awt.Component)
meth public void setOpaque(boolean)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void setPreferredSize(java.awt.Dimension)
meth public void setRequestFocusEnabled(boolean)
meth public void setTimeouts(org.netbeans.jemmy.Timeouts)
meth public void setToolTipText(java.lang.String)
meth public void unregisterKeyboardAction(javax.swing.KeyStroke)
meth public void updateUI()
supr org.netbeans.jemmy.operators.ContainerOperator
hfds SHOW_TOOL_TIP_TIMEOUT,WAIT_TOOL_TIP_TIMEOUT,output,timeouts
hcls JToolTipFinder,JToolTipWindowFinder

CLSS public org.netbeans.jemmy.operators.JDialogOperator
cons public init()
cons public init(int)
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(java.lang.String,int,org.netbeans.jemmy.operators.Operator)
cons public init(javax.swing.JDialog)
cons public init(org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.ComponentChooser,int)
cons public init(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.operators.Operator)
cons public init(org.netbeans.jemmy.operators.WindowOperator)
cons public init(org.netbeans.jemmy.operators.WindowOperator,int)
cons public init(org.netbeans.jemmy.operators.WindowOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.WindowOperator,java.lang.String,int)
cons public init(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser,int)
innr public static JDialogFinder
meth protected static javax.swing.JDialog waitJDialog(java.awt.Window,org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth protected static javax.swing.JDialog waitJDialog(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth protected static javax.swing.JDialog waitJDialog(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser,int)
meth public int getDefaultCloseOperation()
meth public java.awt.Component getGlassPane()
meth public java.awt.Container getContentPane()
meth public javax.accessibility.AccessibleContext getAccessibleContext()
meth public javax.swing.JLayeredPane getLayeredPane()
meth public javax.swing.JMenuBar getJMenuBar()
meth public javax.swing.JRootPane getRootPane()
meth public static java.awt.Dialog getTopModalDialog()
meth public static javax.swing.JDialog findJDialog(java.awt.Window,java.lang.String,boolean,boolean)
meth public static javax.swing.JDialog findJDialog(java.awt.Window,java.lang.String,boolean,boolean,int)
meth public static javax.swing.JDialog findJDialog(java.awt.Window,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JDialog findJDialog(java.awt.Window,org.netbeans.jemmy.ComponentChooser,int)
meth public static javax.swing.JDialog findJDialog(java.lang.String,boolean,boolean)
meth public static javax.swing.JDialog findJDialog(java.lang.String,boolean,boolean,int)
meth public static javax.swing.JDialog findJDialog(org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JDialog findJDialog(org.netbeans.jemmy.ComponentChooser,int)
meth public static javax.swing.JDialog waitJDialog(java.awt.Window,java.lang.String,boolean,boolean)
meth public static javax.swing.JDialog waitJDialog(java.awt.Window,java.lang.String,boolean,boolean,int)
meth public static javax.swing.JDialog waitJDialog(java.awt.Window,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JDialog waitJDialog(java.awt.Window,org.netbeans.jemmy.ComponentChooser,int)
meth public static javax.swing.JDialog waitJDialog(java.lang.String,boolean,boolean)
meth public static javax.swing.JDialog waitJDialog(java.lang.String,boolean,boolean,int)
meth public static javax.swing.JDialog waitJDialog(org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JDialog waitJDialog(org.netbeans.jemmy.ComponentChooser,int)
meth public void setContentPane(java.awt.Container)
meth public void setDefaultCloseOperation(int)
meth public void setGlassPane(java.awt.Component)
meth public void setJMenuBar(javax.swing.JMenuBar)
meth public void setLayeredPane(javax.swing.JLayeredPane)
meth public void setLocationRelativeTo(java.awt.Component)
supr org.netbeans.jemmy.operators.DialogOperator

CLSS public org.netbeans.jemmy.operators.JFrameOperator
cons public init()
cons public init(int)
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(java.lang.String,int,org.netbeans.jemmy.operators.Operator)
cons public init(javax.swing.JFrame)
cons public init(org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.ComponentChooser,int)
cons public init(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.operators.Operator)
innr public static JFrameFinder
meth public int getDefaultCloseOperation()
meth public java.awt.Component getGlassPane()
meth public java.awt.Container getContentPane()
meth public javax.accessibility.AccessibleContext getAccessibleContext()
meth public javax.swing.JLayeredPane getLayeredPane()
meth public javax.swing.JMenuBar getJMenuBar()
meth public javax.swing.JRootPane getRootPane()
meth public static javax.swing.JFrame findJFrame(java.lang.String,boolean,boolean)
meth public static javax.swing.JFrame findJFrame(java.lang.String,boolean,boolean,int)
meth public static javax.swing.JFrame findJFrame(org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JFrame findJFrame(org.netbeans.jemmy.ComponentChooser,int)
meth public static javax.swing.JFrame waitJFrame(java.lang.String,boolean,boolean)
meth public static javax.swing.JFrame waitJFrame(java.lang.String,boolean,boolean,int)
meth public static javax.swing.JFrame waitJFrame(org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JFrame waitJFrame(org.netbeans.jemmy.ComponentChooser,int)
meth public void setContentPane(java.awt.Container)
meth public void setDefaultCloseOperation(int)
meth public void setGlassPane(java.awt.Component)
meth public void setJMenuBar(javax.swing.JMenuBar)
meth public void setLayeredPane(javax.swing.JLayeredPane)
supr org.netbeans.jemmy.operators.FrameOperator

CLSS public org.netbeans.jemmy.operators.JTableOperator
cons public init(javax.swing.JTable)
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int,int,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser,int)
fld public final static java.lang.String CELL_PREFIX_DPROP = "Cell"
fld public final static java.lang.String COLUMN_COUNT_DPROP = "Column count"
fld public final static java.lang.String COLUMN_PREFIX_DPROP = "Column"
fld public final static java.lang.String ROW_COUNT_DPROP = "Row count"
fld public final static java.lang.String SELECTED_COLUMN_PREFIX_DPROP = "SelectedColumn"
fld public final static java.lang.String SELECTED_ROW_PREFIX_DPROP = "SelectedRow"
innr public abstract interface static TableCellChooser
innr public static JTableByCellFinder
innr public static JTableFinder
intf org.netbeans.jemmy.Outputable
intf org.netbeans.jemmy.Timeoutable
meth public boolean editCellAt(int,int)
meth public boolean editCellAt(int,int,java.util.EventObject)
meth public boolean getAutoCreateColumnsFromModel()
meth public boolean getCellSelectionEnabled()
meth public boolean getColumnSelectionAllowed()
meth public boolean getRowSelectionAllowed()
meth public boolean getScrollableTracksViewportHeight()
meth public boolean getScrollableTracksViewportWidth()
meth public boolean getShowHorizontalLines()
meth public boolean getShowVerticalLines()
meth public boolean isCellEditable(int,int)
meth public boolean isCellSelected(int,int)
meth public boolean isColumnSelected(int)
meth public boolean isEditing()
meth public boolean isRowSelected(int)
meth public int columnAtPoint(java.awt.Point)
meth public int convertColumnIndexToModel(int)
meth public int convertColumnIndexToView(int)
meth public int findCellColumn(java.lang.String)
meth public int findCellColumn(java.lang.String,boolean,boolean)
meth public int findCellColumn(java.lang.String,boolean,boolean,int)
meth public int findCellColumn(java.lang.String,int)
meth public int findCellColumn(java.lang.String,int,int)
meth public int findCellColumn(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public int findCellColumn(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator,int)
meth public int findCellColumn(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator,int,int)
meth public int findCellColumn(org.netbeans.jemmy.ComponentChooser)
meth public int findCellColumn(org.netbeans.jemmy.ComponentChooser,int)
meth public int findCellColumn(org.netbeans.jemmy.ComponentChooser,int,int)
meth public int findCellColumn(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser)
meth public int findCellColumn(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser,int)
meth public int findCellColumn(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser,int,int)
meth public int findCellRow(java.lang.String)
meth public int findCellRow(java.lang.String,boolean,boolean)
meth public int findCellRow(java.lang.String,boolean,boolean,int)
meth public int findCellRow(java.lang.String,int)
meth public int findCellRow(java.lang.String,int,int)
meth public int findCellRow(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public int findCellRow(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator,int)
meth public int findCellRow(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator,int,int)
meth public int findCellRow(org.netbeans.jemmy.ComponentChooser)
meth public int findCellRow(org.netbeans.jemmy.ComponentChooser,int)
meth public int findCellRow(org.netbeans.jemmy.ComponentChooser,int,int)
meth public int findCellRow(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser)
meth public int findCellRow(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser,int)
meth public int findCellRow(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser,int,int)
meth public int findColumn(java.lang.String)
meth public int findColumn(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public int getAutoResizeMode()
meth public int getColumnCount()
meth public int getEditingColumn()
meth public int getEditingRow()
meth public int getRowCount()
meth public int getRowHeight()
meth public int getRowMargin()
meth public int getScrollableBlockIncrement(java.awt.Rectangle,int,int)
meth public int getScrollableUnitIncrement(java.awt.Rectangle,int,int)
meth public int getSelectedColumn()
meth public int getSelectedColumnCount()
meth public int getSelectedRow()
meth public int getSelectedRowCount()
meth public int rowAtPoint(java.awt.Point)
meth public int[] getSelectedColumns()
meth public int[] getSelectedRows()
meth public java.awt.Color getGridColor()
meth public java.awt.Color getSelectionBackground()
meth public java.awt.Color getSelectionForeground()
meth public java.awt.Component getEditorComponent()
meth public java.awt.Component getRenderedComponent(int,int)
meth public java.awt.Component getRenderedComponent(int,int,boolean,boolean)
meth public java.awt.Component prepareEditor(javax.swing.table.TableCellEditor,int,int)
meth public java.awt.Component prepareRenderer(javax.swing.table.TableCellRenderer,int,int)
meth public java.awt.Component waitCellComponent(org.netbeans.jemmy.ComponentChooser,int,int)
meth public java.awt.Dimension getIntercellSpacing()
meth public java.awt.Dimension getPreferredScrollableViewportSize()
meth public java.awt.Point findCell(java.lang.String,int)
meth public java.awt.Point findCell(java.lang.String,int[],int[],int)
meth public java.awt.Point findCell(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator,int)
meth public java.awt.Point findCell(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator,int[],int[],int)
meth public java.awt.Point findCell(org.netbeans.jemmy.ComponentChooser)
meth public java.awt.Point findCell(org.netbeans.jemmy.ComponentChooser,int)
meth public java.awt.Point findCell(org.netbeans.jemmy.ComponentChooser,int[],int[],int)
meth public java.awt.Point findCell(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser)
meth public java.awt.Point findCell(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser,int)
meth public java.awt.Point findCell(org.netbeans.jemmy.operators.JTableOperator$TableCellChooser,int[],int[],int)
meth public java.awt.Point getPointToClick(int,int)
meth public java.awt.Rectangle getCellRect(int,int,boolean)
meth public java.lang.Class getColumnClass(int)
meth public java.lang.Object getValueAt(int,int)
meth public java.lang.String getColumnName(int)
meth public java.util.Hashtable getDump()
meth public javax.swing.JPopupMenu callPopupOnCell(int,int)
meth public javax.swing.ListSelectionModel getSelectionModel()
meth public javax.swing.plaf.TableUI getUI()
meth public javax.swing.table.JTableHeader getTableHeader()
meth public javax.swing.table.TableCellEditor getCellEditor()
meth public javax.swing.table.TableCellEditor getCellEditor(int,int)
meth public javax.swing.table.TableCellEditor getDefaultEditor(java.lang.Class)
meth public javax.swing.table.TableCellRenderer getCellRenderer(int,int)
meth public javax.swing.table.TableCellRenderer getDefaultRenderer(java.lang.Class)
meth public javax.swing.table.TableColumn getColumn(java.lang.Object)
meth public javax.swing.table.TableColumnModel getColumnModel()
meth public javax.swing.table.TableModel getModel()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public org.netbeans.jemmy.Timeouts getTimeouts()
meth public org.netbeans.jemmy.operators.JTableHeaderOperator getHeaderOperator()
meth public static javax.swing.JTable findJTable(java.awt.Container,java.lang.String,boolean,boolean,int,int)
meth public static javax.swing.JTable findJTable(java.awt.Container,java.lang.String,boolean,boolean,int,int,int)
meth public static javax.swing.JTable findJTable(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JTable findJTable(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public static javax.swing.JTable waitJTable(java.awt.Container,java.lang.String,boolean,boolean,int,int)
meth public static javax.swing.JTable waitJTable(java.awt.Container,java.lang.String,boolean,boolean,int,int,int)
meth public static javax.swing.JTable waitJTable(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JTable waitJTable(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public void addColumn(javax.swing.table.TableColumn)
meth public void addColumnSelectionInterval(int,int)
meth public void addRowSelectionInterval(int,int)
meth public void changeCellObject(int,int,java.lang.Object)
meth public void changeCellText(int,int,java.lang.String)
meth public void clearSelection()
meth public void clickForEdit(int,int)
meth public void clickOnCell(int,int)
meth public void clickOnCell(int,int,int)
meth public void clickOnCell(int,int,int,int)
meth public void clickOnCell(int,int,int,int,int)
meth public void columnAdded(javax.swing.event.TableColumnModelEvent)
meth public void columnMarginChanged(javax.swing.event.ChangeEvent)
meth public void columnMoved(javax.swing.event.TableColumnModelEvent)
meth public void columnRemoved(javax.swing.event.TableColumnModelEvent)
meth public void columnSelectionChanged(javax.swing.event.ListSelectionEvent)
meth public void copyEnvironment(org.netbeans.jemmy.operators.Operator)
meth public void createDefaultColumnsFromModel()
meth public void editingCanceled(javax.swing.event.ChangeEvent)
meth public void editingStopped(javax.swing.event.ChangeEvent)
meth public void moveColumn(int,int)
meth public void removeColumn(javax.swing.table.TableColumn)
meth public void removeColumnSelectionInterval(int,int)
meth public void removeEditor()
meth public void removeRowSelectionInterval(int,int)
meth public void scrollToCell(int,int)
meth public void selectAll()
meth public void selectCell(int,int)
meth public void setAutoCreateColumnsFromModel(boolean)
meth public void setAutoResizeMode(int)
meth public void setCellEditor(javax.swing.table.TableCellEditor)
meth public void setCellSelectionEnabled(boolean)
meth public void setColumnModel(javax.swing.table.TableColumnModel)
meth public void setColumnSelectionAllowed(boolean)
meth public void setColumnSelectionInterval(int,int)
meth public void setDefaultEditor(java.lang.Class,javax.swing.table.TableCellEditor)
meth public void setDefaultRenderer(java.lang.Class,javax.swing.table.TableCellRenderer)
meth public void setEditingColumn(int)
meth public void setEditingRow(int)
meth public void setGridColor(java.awt.Color)
meth public void setIntercellSpacing(java.awt.Dimension)
meth public void setModel(javax.swing.table.TableModel)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void setPreferredScrollableViewportSize(java.awt.Dimension)
meth public void setRowHeight(int)
meth public void setRowMargin(int)
meth public void setRowSelectionAllowed(boolean)
meth public void setRowSelectionInterval(int,int)
meth public void setSelectionBackground(java.awt.Color)
meth public void setSelectionForeground(java.awt.Color)
meth public void setSelectionMode(int)
meth public void setSelectionModel(javax.swing.ListSelectionModel)
meth public void setShowGrid(boolean)
meth public void setShowHorizontalLines(boolean)
meth public void setShowVerticalLines(boolean)
meth public void setTableHeader(javax.swing.table.JTableHeader)
meth public void setTimeouts(org.netbeans.jemmy.Timeouts)
meth public void setUI(javax.swing.plaf.TableUI)
meth public void setValueAt(java.lang.Object,int,int)
meth public void tableChanged(javax.swing.event.TableModelEvent)
meth public void valueChanged(javax.swing.event.ListSelectionEvent)
meth public void waitCell(java.lang.String,int,int)
supr org.netbeans.jemmy.operators.JComponentOperator
hfds WAIT_EDITING_TIMEOUT,driver,output,timeouts
hcls ByRenderedComponentTableCellChooser,BySubStringTableCellChooser,CellComponentWaiter

CLSS public org.netbeans.jemmy.operators.JTreeOperator
cons public init(javax.swing.JTree)
cons public init(org.netbeans.jemmy.operators.ContainerOperator)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,java.lang.String,int,int)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.ContainerOperator,org.netbeans.jemmy.ComponentChooser,int)
fld public final static java.lang.String NODE_PREFIX_DPROP = "Node"
fld public final static java.lang.String ROOT_DPROP = "Root"
fld public final static java.lang.String SELECTION_FIRST_DPROP = "First selected"
fld public final static java.lang.String SELECTION_LAST_DPROP = "Last selected"
innr public NoSuchPathException
innr public abstract interface static TreePathChooser
innr public abstract interface static TreeRowChooser
innr public static JTreeByItemFinder
innr public static JTreeFinder
intf org.netbeans.jemmy.Outputable
intf org.netbeans.jemmy.Timeoutable
meth public boolean getInvokesStopCellEditing()
meth public boolean getScrollableTracksViewportHeight()
meth public boolean getScrollableTracksViewportWidth()
meth public boolean getScrollsOnExpand()
meth public boolean getShowsRootHandles()
meth public boolean hasBeenExpanded(javax.swing.tree.TreePath)
meth public boolean isCollapsed(int)
meth public boolean isCollapsed(javax.swing.tree.TreePath)
meth public boolean isEditable()
meth public boolean isEditing()
meth public boolean isExpanded(int)
meth public boolean isExpanded(javax.swing.tree.TreePath)
meth public boolean isFixedRowHeight()
meth public boolean isLargeModel()
meth public boolean isPathEditable(javax.swing.tree.TreePath)
meth public boolean isPathSelected(javax.swing.tree.TreePath)
meth public boolean isRootVisible()
meth public boolean isRowSelected(int)
meth public boolean isSelectionEmpty()
meth public boolean isVisible(javax.swing.tree.TreePath)
meth public boolean stopEditing()
meth public int findRow(java.lang.String)
meth public int findRow(java.lang.String,boolean,boolean)
meth public int findRow(java.lang.String,boolean,boolean,int)
meth public int findRow(java.lang.String,int)
meth public int findRow(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public int findRow(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator,int)
meth public int findRow(org.netbeans.jemmy.ComponentChooser)
meth public int findRow(org.netbeans.jemmy.ComponentChooser,int)
meth public int findRow(org.netbeans.jemmy.operators.JTreeOperator$TreeRowChooser)
meth public int findRow(org.netbeans.jemmy.operators.JTreeOperator$TreeRowChooser,int)
meth public int getChildCount(java.lang.Object)
meth public int getChildCount(javax.swing.tree.TreePath)
meth public int getClosestRowForLocation(int,int)
meth public int getLeadSelectionRow()
meth public int getMaxSelectionRow()
meth public int getMinSelectionRow()
meth public int getRowCount()
meth public int getRowForLocation(int,int)
meth public int getRowForPath(javax.swing.tree.TreePath)
meth public int getRowHeight()
meth public int getScrollableBlockIncrement(java.awt.Rectangle,int,int)
meth public int getScrollableUnitIncrement(java.awt.Rectangle,int,int)
meth public int getSelectionCount()
meth public int getVisibleRowCount()
meth public int[] getSelectionRows()
meth public java.awt.Component getRenderedComponent(javax.swing.tree.TreePath)
meth public java.awt.Component getRenderedComponent(javax.swing.tree.TreePath,boolean,boolean,boolean)
meth public java.awt.Dimension getPreferredScrollableViewportSize()
meth public java.awt.Point getPointToClick(int)
meth public java.awt.Point getPointToClick(javax.swing.tree.TreePath)
meth public java.awt.Rectangle getPathBounds(javax.swing.tree.TreePath)
meth public java.awt.Rectangle getRowBounds(int)
meth public java.lang.Object chooseSubnode(java.lang.Object,java.lang.String)
meth public java.lang.Object chooseSubnode(java.lang.Object,java.lang.String,int)
meth public java.lang.Object chooseSubnode(java.lang.Object,java.lang.String,int,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public java.lang.Object chooseSubnode(java.lang.Object,java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public java.lang.Object getChild(java.lang.Object,int)
meth public java.lang.Object getLastSelectedPathComponent()
meth public java.lang.Object getRoot()
meth public java.lang.Object[] getChildren(java.lang.Object)
meth public java.lang.String convertValueToText(java.lang.Object,boolean,boolean,boolean,int,boolean)
meth public java.util.Enumeration getExpandedDescendants(javax.swing.tree.TreePath)
meth public java.util.Hashtable getDump()
meth public javax.swing.JPopupMenu callPopupOnPath(javax.swing.tree.TreePath)
meth public javax.swing.JPopupMenu callPopupOnPath(javax.swing.tree.TreePath,int)
meth public javax.swing.JPopupMenu callPopupOnPaths(javax.swing.tree.TreePath[])
meth public javax.swing.JPopupMenu callPopupOnPaths(javax.swing.tree.TreePath[],int)
meth public javax.swing.plaf.TreeUI getUI()
meth public javax.swing.tree.TreeCellEditor getCellEditor()
meth public javax.swing.tree.TreeCellRenderer getCellRenderer()
meth public javax.swing.tree.TreeModel getModel()
meth public javax.swing.tree.TreePath findPath(java.lang.String)
meth public javax.swing.tree.TreePath findPath(java.lang.String,java.lang.String)
meth public javax.swing.tree.TreePath findPath(java.lang.String,java.lang.String,boolean,boolean)
meth public javax.swing.tree.TreePath findPath(java.lang.String,java.lang.String,java.lang.String)
meth public javax.swing.tree.TreePath findPath(java.lang.String,java.lang.String,java.lang.String,boolean,boolean)
meth public javax.swing.tree.TreePath findPath(java.lang.String,java.lang.String,java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public javax.swing.tree.TreePath findPath(java.lang.String,java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public javax.swing.tree.TreePath findPath(java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public javax.swing.tree.TreePath findPath(java.lang.String[])
meth public javax.swing.tree.TreePath findPath(java.lang.String[],boolean,boolean)
meth public javax.swing.tree.TreePath findPath(java.lang.String[],int[])
meth public javax.swing.tree.TreePath findPath(java.lang.String[],int[],boolean,boolean)
meth public javax.swing.tree.TreePath findPath(java.lang.String[],int[],org.netbeans.jemmy.operators.Operator$StringComparator)
meth public javax.swing.tree.TreePath findPath(java.lang.String[],org.netbeans.jemmy.operators.Operator$StringComparator)
meth public javax.swing.tree.TreePath findPath(org.netbeans.jemmy.operators.JTreeOperator$TreePathChooser)
meth public javax.swing.tree.TreePath getChildPath(javax.swing.tree.TreePath,int)
meth public javax.swing.tree.TreePath getClosestPathForLocation(int,int)
meth public javax.swing.tree.TreePath getEditingPath()
meth public javax.swing.tree.TreePath getLeadSelectionPath()
meth public javax.swing.tree.TreePath getPathForLocation(int,int)
meth public javax.swing.tree.TreePath getPathForRow(int)
meth public javax.swing.tree.TreePath getSelectionPath()
meth public javax.swing.tree.TreePath[] getChildPaths(javax.swing.tree.TreePath)
meth public javax.swing.tree.TreePath[] getSelectionPaths()
meth public javax.swing.tree.TreeSelectionModel getSelectionModel()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public org.netbeans.jemmy.Timeouts getTimeouts()
meth public static javax.swing.JTree findJTree(java.awt.Container,java.lang.String,boolean,boolean,int)
meth public static javax.swing.JTree findJTree(java.awt.Container,java.lang.String,boolean,boolean,int,int)
meth public static javax.swing.JTree findJTree(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JTree findJTree(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public static javax.swing.JTree waitJTree(java.awt.Container,java.lang.String,boolean,boolean,int)
meth public static javax.swing.JTree waitJTree(java.awt.Container,java.lang.String,boolean,boolean,int,int)
meth public static javax.swing.JTree waitJTree(java.awt.Container,org.netbeans.jemmy.ComponentChooser)
meth public static javax.swing.JTree waitJTree(java.awt.Container,org.netbeans.jemmy.ComponentChooser,int)
meth public void addSelectionInterval(int,int)
meth public void addSelectionPath(javax.swing.tree.TreePath)
meth public void addSelectionPaths(javax.swing.tree.TreePath[])
meth public void addSelectionRow(int)
meth public void addSelectionRows(int[])
meth public void addTreeExpansionListener(javax.swing.event.TreeExpansionListener)
meth public void addTreeSelectionListener(javax.swing.event.TreeSelectionListener)
meth public void addTreeWillExpandListener(javax.swing.event.TreeWillExpandListener)
meth public void cancelEditing()
meth public void changePathObject(javax.swing.tree.TreePath,java.lang.Object)
meth public void changePathText(javax.swing.tree.TreePath,java.lang.String)
meth public void clearSelection()
meth public void clickForEdit(javax.swing.tree.TreePath)
meth public void clickOnPath(javax.swing.tree.TreePath)
meth public void clickOnPath(javax.swing.tree.TreePath,int)
meth public void clickOnPath(javax.swing.tree.TreePath,int,int)
meth public void clickOnPath(javax.swing.tree.TreePath,int,int,int)
meth public void collapsePath(javax.swing.tree.TreePath)
meth public void collapseRow(int)
meth public void copyEnvironment(org.netbeans.jemmy.operators.Operator)
meth public void doCollapsePath(javax.swing.tree.TreePath)
meth public void doCollapseRow(int)
meth public void doExpandPath(javax.swing.tree.TreePath)
meth public void doExpandRow(int)
meth public void doMakeVisible(javax.swing.tree.TreePath)
meth public void expandPath(javax.swing.tree.TreePath)
meth public void expandRow(int)
meth public void fireTreeCollapsed(javax.swing.tree.TreePath)
meth public void fireTreeExpanded(javax.swing.tree.TreePath)
meth public void fireTreeWillCollapse(javax.swing.tree.TreePath)
meth public void fireTreeWillExpand(javax.swing.tree.TreePath)
meth public void makeVisible(javax.swing.tree.TreePath)
meth public void removeSelectionInterval(int,int)
meth public void removeSelectionPath(javax.swing.tree.TreePath)
meth public void removeSelectionPaths(javax.swing.tree.TreePath[])
meth public void removeSelectionRow(int)
meth public void removeSelectionRows(int[])
meth public void removeTreeExpansionListener(javax.swing.event.TreeExpansionListener)
meth public void removeTreeSelectionListener(javax.swing.event.TreeSelectionListener)
meth public void removeTreeWillExpandListener(javax.swing.event.TreeWillExpandListener)
meth public void scrollPathToVisible(javax.swing.tree.TreePath)
meth public void scrollRowToVisible(int)
meth public void scrollToPath(javax.swing.tree.TreePath)
meth public void scrollToRow(int)
meth public void selectPath(javax.swing.tree.TreePath)
meth public void selectPaths(javax.swing.tree.TreePath[])
meth public void selectRow(int)
meth public void setCellEditor(javax.swing.tree.TreeCellEditor)
meth public void setCellRenderer(javax.swing.tree.TreeCellRenderer)
meth public void setEditable(boolean)
meth public void setInvokesStopCellEditing(boolean)
meth public void setLargeModel(boolean)
meth public void setModel(javax.swing.tree.TreeModel)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void setRootVisible(boolean)
meth public void setRowHeight(int)
meth public void setScrollsOnExpand(boolean)
meth public void setSelectionInterval(int,int)
meth public void setSelectionModel(javax.swing.tree.TreeSelectionModel)
meth public void setSelectionPath(javax.swing.tree.TreePath)
meth public void setSelectionPaths(javax.swing.tree.TreePath[])
meth public void setSelectionRow(int)
meth public void setSelectionRows(int[])
meth public void setShowsRootHandles(boolean)
meth public void setTimeouts(org.netbeans.jemmy.Timeouts)
meth public void setUI(javax.swing.plaf.TreeUI)
meth public void setVisibleRowCount(int)
meth public void startEditingAtPath(javax.swing.tree.TreePath)
meth public void treeDidChange()
meth public void waitCollapsed(int)
meth public void waitCollapsed(javax.swing.tree.TreePath)
meth public void waitExpanded(int)
meth public void waitExpanded(javax.swing.tree.TreePath)
meth public void waitRow(java.lang.String,int)
meth public void waitSelected(int)
meth public void waitSelected(int[])
meth public void waitSelected(javax.swing.tree.TreePath)
meth public void waitSelected(javax.swing.tree.TreePath[])
meth public void waitVisible(javax.swing.tree.TreePath)
supr org.netbeans.jemmy.operators.JComponentOperator
hfds BEFORE_EDIT_TIMEOUT,WAIT_AFTER_NODE_EXPANDED_TIMEOUT,WAIT_EDITING_TIMEOUT,WAIT_NEXT_NODE_TIMEOUT,WAIT_NODE_COLLAPSED_TIMEOUT,WAIT_NODE_EXPANDED_TIMEOUT,WAIT_NODE_VISIBLE_TIMEOUT,driver,output,timeouts
hcls ByRenderedComponentTreeRowChooser,BySubStringTreeRowChooser,StringArrayPathChooser

CLSS public abstract org.netbeans.jemmy.operators.Operator
cons public init()
fld public final static java.lang.String CLASS_DPROP = "Class"
fld public final static java.lang.String TO_STRING_DPROP = "toString"
innr protected abstract MapAction
innr protected abstract MapBooleanAction
innr protected abstract MapByteAction
innr protected abstract MapCharacterAction
innr protected abstract MapDoubleAction
innr protected abstract MapFloatAction
innr protected abstract MapIntegerAction
innr protected abstract MapLongAction
innr protected abstract MapVoidAction
innr protected abstract NoBlockingAction
innr public abstract interface static ComponentVisualizer
innr public abstract interface static PathParser
innr public abstract interface static StringComparator
innr public static DefaultPathParser
innr public static DefaultStringComparator
innr public static Finder
intf org.netbeans.jemmy.Outputable
intf org.netbeans.jemmy.Timeoutable
meth protected boolean runMapping(org.netbeans.jemmy.operators.Operator$MapBooleanAction)
meth protected byte runMapping(org.netbeans.jemmy.operators.Operator$MapByteAction)
meth protected char runMapping(org.netbeans.jemmy.operators.Operator$MapCharacterAction)
meth protected double runMapping(org.netbeans.jemmy.operators.Operator$MapDoubleAction)
meth protected float runMapping(org.netbeans.jemmy.operators.Operator$MapFloatAction)
meth protected int runMapping(org.netbeans.jemmy.operators.Operator$MapIntegerAction)
meth protected java.lang.Object produceTimeRestricted(org.netbeans.jemmy.Action,java.lang.Object,java.lang.String)
meth protected java.lang.Object produceTimeRestricted(org.netbeans.jemmy.Action,java.lang.String)
meth protected java.lang.Object runMapping(org.netbeans.jemmy.operators.Operator$MapAction)
meth protected java.lang.String[] addToDump(java.util.Hashtable,java.lang.String,java.lang.Object[])
meth protected java.lang.String[] addToDump(java.util.Hashtable,java.lang.String,java.lang.Object[][])
meth protected long runMapping(org.netbeans.jemmy.operators.Operator$MapLongAction)
meth protected void lockQueue()
meth protected void produceNoBlocking(org.netbeans.jemmy.operators.Operator$NoBlockingAction)
meth protected void produceNoBlocking(org.netbeans.jemmy.operators.Operator$NoBlockingAction,java.lang.Object)
meth protected void runMapping(org.netbeans.jemmy.operators.Operator$MapVoidAction)
meth protected void unlockAndThrow(java.lang.Exception)
meth protected void unlockQueue()
meth public abstract java.awt.Component getSource()
meth public boolean getVerification()
meth public boolean isCaptionEqual(java.lang.String,java.lang.String)
meth public boolean setVerification(boolean)
meth public int getCharKey(char)
meth public int getCharModifiers(char)
meth public int[] getCharsKeys(char[])
meth public int[] getCharsKeys(java.lang.String)
meth public int[] getCharsModifiers(char[])
meth public int[] getCharsModifiers(java.lang.String)
meth public java.lang.String toStringSource()
meth public java.lang.String[] getParentPath(java.lang.String[])
meth public java.lang.String[] parseString(java.lang.String)
meth public java.lang.String[] parseString(java.lang.String,java.lang.String)
meth public java.util.Hashtable getDump()
meth public org.netbeans.jemmy.CharBindingMap getCharBindingMap()
meth public org.netbeans.jemmy.ComponentChooser[] getParentPath(org.netbeans.jemmy.ComponentChooser[])
meth public org.netbeans.jemmy.JemmyProperties getProperties()
meth public org.netbeans.jemmy.JemmyProperties setProperties(org.netbeans.jemmy.JemmyProperties)
meth public org.netbeans.jemmy.QueueTool getQueueTool()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public org.netbeans.jemmy.Timeouts getTimeouts()
meth public org.netbeans.jemmy.operators.Operator$ComponentVisualizer getVisualizer()
meth public org.netbeans.jemmy.operators.Operator$PathParser getPathParser()
meth public org.netbeans.jemmy.operators.Operator$StringComparator getComparator()
meth public static boolean getDefaultVerification()
meth public static boolean isCaptionEqual(java.lang.String,java.lang.String,boolean,boolean)
meth public static boolean isCaptionEqual(java.lang.String,java.lang.String,org.netbeans.jemmy.operators.Operator$StringComparator)
meth public static boolean setDefaultVerification(boolean)
meth public static int getDefaultMouseButton()
meth public static int getPopupMouseButton()
meth public static org.netbeans.jemmy.operators.ComponentOperator createOperator(java.awt.Component)
meth public static org.netbeans.jemmy.operators.Operator getEnvironmentOperator()
meth public static org.netbeans.jemmy.operators.Operator$ComponentVisualizer getDefaultComponentVisualizer()
meth public static org.netbeans.jemmy.operators.Operator$ComponentVisualizer setDefaultComponentVisualizer(org.netbeans.jemmy.operators.Operator$ComponentVisualizer)
meth public static org.netbeans.jemmy.operators.Operator$PathParser getDefaultPathParser()
meth public static org.netbeans.jemmy.operators.Operator$PathParser setDefaultPathParser(org.netbeans.jemmy.operators.Operator$PathParser)
meth public static org.netbeans.jemmy.operators.Operator$StringComparator getDefaultStringComparator()
meth public static org.netbeans.jemmy.operators.Operator$StringComparator setDefaultStringComparator(org.netbeans.jemmy.operators.Operator$StringComparator)
meth public static void addOperatorPackage(java.lang.String)
meth public void copyEnvironment(org.netbeans.jemmy.operators.Operator)
meth public void printDump()
meth public void setCharBindingMap(org.netbeans.jemmy.CharBindingMap)
meth public void setComparator(org.netbeans.jemmy.operators.Operator$StringComparator)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void setPathParser(org.netbeans.jemmy.operators.Operator$PathParser)
meth public void setTimeouts(org.netbeans.jemmy.Timeouts)
meth public void setVisualizer(org.netbeans.jemmy.operators.Operator$ComponentVisualizer)
meth public void waitState(org.netbeans.jemmy.ComponentChooser)
supr java.lang.Object
hfds comparator,map,operatorPkgs,output,parser,properties,queueTool,timeouts,verification,visualizer
hcls NullOperator

CLSS public org.netbeans.jemmy.operators.WindowOperator
cons public init()
cons public init(int)
cons public init(int,org.netbeans.jemmy.operators.Operator)
cons public init(java.awt.Window)
cons public init(org.netbeans.jemmy.operators.WindowOperator)
cons public init(org.netbeans.jemmy.operators.WindowOperator,int)
cons public init(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser)
cons public init(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser,int)
intf org.netbeans.jemmy.Outputable
meth protected static java.awt.Window waitWindow(java.awt.Window,org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth protected static java.awt.Window waitWindow(org.netbeans.jemmy.ComponentChooser,int,org.netbeans.jemmy.Timeouts,org.netbeans.jemmy.TestOut)
meth protected static java.awt.Window waitWindow(org.netbeans.jemmy.operators.WindowOperator,org.netbeans.jemmy.ComponentChooser,int)
meth public boolean isActive()
meth public boolean isFocused()
meth public java.awt.Component getFocusOwner()
meth public java.awt.Window findSubWindow(org.netbeans.jemmy.ComponentChooser)
meth public java.awt.Window findSubWindow(org.netbeans.jemmy.ComponentChooser,int)
meth public java.awt.Window getOwner()
meth public java.awt.Window waitSubWindow(org.netbeans.jemmy.ComponentChooser)
meth public java.awt.Window waitSubWindow(org.netbeans.jemmy.ComponentChooser,int)
meth public java.awt.Window[] getOwnedWindows()
meth public java.lang.String getWarningString()
meth public org.netbeans.jemmy.TestOut getOutput()
meth public static java.awt.Window findWindow(java.awt.Window,org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Window findWindow(java.awt.Window,org.netbeans.jemmy.ComponentChooser,int)
meth public static java.awt.Window findWindow(org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Window findWindow(org.netbeans.jemmy.ComponentChooser,int)
meth public static java.awt.Window waitWindow(java.awt.Window,org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Window waitWindow(java.awt.Window,org.netbeans.jemmy.ComponentChooser,int)
meth public static java.awt.Window waitWindow(org.netbeans.jemmy.ComponentChooser)
meth public static java.awt.Window waitWindow(org.netbeans.jemmy.ComponentChooser,int)
meth public void activate()
meth public void addWindowListener(java.awt.event.WindowListener)
meth public void applyResourceBundle(java.lang.String)
meth public void applyResourceBundle(java.util.ResourceBundle)
meth public void close()
meth public void copyEnvironment(org.netbeans.jemmy.operators.Operator)
meth public void dispose()
meth public void move(int,int)
meth public void pack()
meth public void removeWindowListener(java.awt.event.WindowListener)
meth public void requestClose()
meth public void requestCloseAndThenHide()
meth public void resize(int,int)
meth public void setOutput(org.netbeans.jemmy.TestOut)
meth public void toBack()
meth public void toFront()
meth public void waitClosed()
supr org.netbeans.jemmy.operators.ContainerOperator
hfds driver,output

CLSS public abstract interface org.netbeans.junit.NbTest
intf junit.framework.Test
meth public abstract boolean canRun()
meth public abstract java.lang.String getExpectedFail()
meth public abstract void setFilter(org.netbeans.junit.Filter)

CLSS public abstract org.netbeans.junit.NbTestCase
cons public init(java.lang.String)
intf org.netbeans.junit.NbTest
meth protected boolean runInEQ()
meth protected final int getTestNumber()
meth protected int timeOut()
meth protected java.lang.String logRoot()
meth protected java.util.logging.Level logLevel()
meth public boolean canRun()
meth public java.io.File getDataDir()
meth public java.io.File getGoldenFile()
meth public java.io.File getGoldenFile(java.lang.String)
meth public java.io.File getWorkDir() throws java.io.IOException
meth public java.io.PrintStream getLog()
meth public java.io.PrintStream getLog(java.lang.String)
meth public java.io.PrintStream getRef()
meth public java.lang.String getExpectedFail()
meth public java.lang.String getWorkDirPath()
meth public static int assertSize(java.lang.String,java.util.Collection<?>,int,org.netbeans.junit.MemoryFilter)
meth public static java.lang.String convertNBFSURL(java.net.URL)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static void assertFile(java.io.File,java.io.File)
meth public static void assertFile(java.io.File,java.io.File,java.io.File)
meth public static void assertFile(java.io.File,java.io.File,java.io.File,org.netbeans.junit.diff.Diff)
meth public static void assertFile(java.lang.String,java.io.File,java.io.File,java.io.File)
meth public static void assertFile(java.lang.String,java.io.File,java.io.File,java.io.File,org.netbeans.junit.diff.Diff)
meth public static void assertFile(java.lang.String,java.lang.String)
meth public static void assertFile(java.lang.String,java.lang.String,java.lang.String)
meth public static void assertFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
meth public static void assertFile(java.lang.String,java.lang.String,java.lang.String,java.lang.String,org.netbeans.junit.diff.Diff)
meth public static void assertFile(java.lang.String,java.lang.String,java.lang.String,org.netbeans.junit.diff.Diff)
meth public static void assertGC(java.lang.String,java.lang.ref.Reference<?>)
meth public static void assertGC(java.lang.String,java.lang.ref.Reference<?>,java.util.Set<?>)
meth public static void assertSize(java.lang.String,int,java.lang.Object)
meth public static void assertSize(java.lang.String,java.util.Collection<?>,int)
meth public static void assertSize(java.lang.String,java.util.Collection<?>,int,java.lang.Object[])
meth public static void failByBug(int)
meth public static void failByBug(int,java.lang.String)
meth public void clearWorkDir() throws java.io.IOException
meth public void compareReferenceFiles()
meth public void compareReferenceFiles(java.lang.String,java.lang.String,java.lang.String)
meth public void log(java.lang.String)
meth public void log(java.lang.String,java.lang.String)
meth public void ref(java.lang.String)
meth public void run(junit.framework.TestResult)
meth public void runBare() throws java.lang.Throwable
meth public void setFilter(org.netbeans.junit.Filter)
supr junit.framework.TestCase
hfds DEFAULT_TIME_OUT_CALLED,filter,lastTestMethod,logStreamTable,radix,systemOutPSWrapper,time,usedPaths,vmDeadline,workDirPath
hcls WFOS

