Lib.test.Graph.py Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-standalone Show documentation
Show all versions of jython-standalone Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
from java import awt
from math import *
from jarray import array
class Graph(awt.Canvas):
def __init__(self):
self.function = None
def paint(self, g):
if self.function is None:
return self.error(g)
sz = self.size
xs = range(0, sz.width, 2)
xscale = 4*pi/sz.width
xoffset = -2*pi
yscale = -sz.height/2.
yoffset = sz.height/2.
ys = []
for x in xs:
x = xscale*x + xoffset
y = int(yscale*self.function(x)+yoffset)
ys.append(y)
g.drawPolyline(array(xs, 'i'), array(ys, 'i'), len(xs))
def error(self, g):
message = "Invalid Expression"
g.font = awt.Font('Serif', awt.Font.BOLD, 20)
width = g.fontMetrics.stringWidth(message)
x = (self.size.width-width)/2
y = (self.size.height+g.fontMetrics.height)/2
g.drawString("Invalid Expression", x, y)
def setExpression(self, e):
try:
self.function = eval('lambda x: '+e)
except:
self.function = None
self.repaint()
if __name__ == '__main__':
def enter(e):
graph.setExpression(expression.text)
expression.caretPosition=0
expression.selectAll()
p = awt.Panel(layout=awt.BorderLayout())
graph = Graph()
p.add(graph, 'Center')
expression = awt.TextField(text='(sin(3*x)+cos(x))/2', actionPerformed=enter)
p.add(expression, 'South')
import pawt
pawt.test(p, size=(300,300))
enter(None)