def __init__(self, base_class_name, d=None): '''Initialize the proxy with the interface name and methods :param base_class_name: the class name of the interface to implement in dotted form (e.g. java.lang.Runnable) :param d: an optional dictionary of method name to implementation ''' self.ref_id, self.ref = J.create_jref(self) self.__d = d or {} jclass = J.class_for_name(base_class_name) loader = J.call(jclass, "getClassLoader", "()Ljava/lang/ClassLoader;") env = J.get_env() classes = env.make_object_array(1, env.find_class("java/lang/Class")) env.set_object_array_element(classes, 0, jclass) handler = J.make_instance( "org/cellprofiler/javabridge/CPythonInvocationHandler", "(Ljava/lang/String;)V", self.ref_id) self.o = J.static_call( "java/lang/reflect/Proxy", "newProxyInstance", "(Ljava/lang/ClassLoader;" "[Ljava/lang/Class;" "Ljava/lang/reflect/InvocationHandler;)" "Ljava/lang/Object;", loader, classes, handler)
def test_12_01_jref(self): o = dict(foo="bar", baz="2") ref_id, ref = javabridge.create_jref(o) alt = javabridge.redeem_jref(ref_id) o["bar"] = "bunny" for key in o: self.assertTrue(key in alt) self.assertEqual(o[key], alt[key])
def __init__(self, figure): FigureCanvasAgg.__init__(self, figure) self.__ref_id, self.__ref = javabridge.create_jref(self) self.__cpython = javabridge.make_instance( 'org/cellprofiler/javabridge/CPython', '()V') paint_script = ( 'import javabridge\n' 'self = javabridge.redeem_jref("%s")\n' 'self.draw(javabridge.JWrapper(graphics))\n') % self.__ref_id component = javabridge.run_script( """ new javax.swing.JComponent() { paintComponent: function(graphics) { locals = new java.util.Hashtable(); locals.put("graphics", graphics); cpython.exec(script, locals, locals); } } """, dict(cpython=self.__cpython, script=paint_script)) self.__component = javabridge.JWrapper(component) self.__event_queue_class = None self.__component_listener = javabridge.JProxy( 'java.awt.event.ComponentListener', dict(componentHidden=self._on_component_hidden, componentMoved=self._on_component_moved, componentResized=self._on_component_resized, componentShown=self._on_component_shown)) self.__component.addComponentListener(self.__component_listener.o) self.__key_event_cls = javabridge.JClassWrapper( 'java.awt.event.KeyEvent') self.__key_listener = javabridge.JProxy( 'java.awt.event.KeyListener', dict(keyPressed=self._on_key_pressed, keyReleased=self._on_key_released, keyTyped=self._on_key_typed)) self.__component.addKeyListener(self.__key_listener.o) self.__component.setFocusable(True) self.__mouse_listener = javabridge.JProxy( 'java.awt.event.MouseListener', dict(mouseClicked=self._on_mouse_clicked, mouseEntered=self._on_mouse_entered, mouseExited=self._on_mouse_exited, mousePressed=self._on_mouse_pressed, mouseReleased=self._on_mouse_released)) self.__component.addMouseListener(self.__mouse_listener.o) self.__mouse_motion_listener = javabridge.JProxy( 'java.awt.event.MouseMotionListener', dict(mouseDragged=self._on_mouse_dragged, mouseMoved=self._on_mouse_moved)) self.__component.addMouseMotionListener(self.__mouse_motion_listener.o)
def test_12_02_jref_lost(self): o = dict(foo="bar", baz="2") ref_id, ref = javabridge.create_jref(o) del ref self.assertRaises(KeyError, javabridge.redeem_jref, ref_id)
figure = plt.figure() ax = figure.add_axes([.05, .05, .9, .9]) x = np.linspace(0, np.pi * 8) ax.plot(x, np.sin(x)) canvas = figure.canvas frame = canvas.component.getTopLevelAncestor() toolbar = plt.get_current_fig_manager().frame.toolbar toolbar.add_button(lambda event: popup_script_dlg(canvas), "hand") plt.show() return frame, canvas, toolbar javabridge.start_vm() javabridge.activate_awt() event = threading.Event() event_ref_id, event_ref = javabridge.create_jref(event) cpython = javabridge.JClassWrapper('org.cellprofiler.javabridge.CPython')() set_event_script = ('import javabridge\n' 'event = javabridge.redeem_jref("%s")\n' 'event.set()') % event_ref_id adapter = javabridge.run_script( """ new java.awt.event.WindowAdapter() { windowClosed: function(e) { cpython.exec(script); } } """, dict(cpython=cpython, script=set_event_script)) frame, canvas, toolbar = run_ui() frame.addWindowListener(adapter) frame.setVisible(True)