Swing Sampler
From: Jeff Emanuel <jemanuel <at> frii.com>BR Subject: Re: Tranlating a simple Java editor into JythonBR Newsgroups: gmane.comp.lang.jython.userBR Date: 2007-03-24 19:07:37 GMTBR BR Anton Vredegoor wrote:BR BR > Hello All,BR > BR > I'm an experienced Python programmer with only a very basic BR > understanding of Java. I'm currently trying to translate this veryBR > simple Java editor into Jython.BR > Any hints or complete or partial translations of BR > the code are very welcome.BR > http://leepoint.net/notes-java/examples/components/editor/nutpad.html[[BR]] > BR Heres a quick translation. For the Java inner classes,BR translate them to top level classes that take the outer instanceBR as a constructor argument. Java inner classes have an implicitBR pointer to the enclosing class instance. You must make thatBR explicit.BR BR from java.awt import *
from java.awt.event import *
from javax.swing import *
from java.io import *
from java.lang import System,Integer
#/////////////////////////////////////////////////////////////////////// NutPad
class NutPad(JFrame):
#... Components
_editArea=None
_fileChooser = JFileChooser()
#============================================================== constructor
def __init__(self):
#... Create actions for menu items, buttons, ...
self._openAction = OpenAction(self)
self._saveAction = SaveAction(self)
self._exitAction = ExitAction(self)
#... Create scrollable text area.
self._editArea = JTextArea(15, 80)
self._editArea.border=BorderFactory.createEmptyBorder(2,2,2,2)
self._editArea.font=Font("monospaced", Font.PLAIN, 14)
scrollingText = JScrollPane(self._editArea)
#-- Create a content pane, set layout, add component.
content = JPanel()
content.setLayout(BorderLayout())
content.add(scrollingText, BorderLayout.CENTER);
#... Create menubar
menuBar = JMenuBar()
fileMenu = menuBar.add(JMenu("File"))
fileMenu.setMnemonic('F')
fileMenu.add(self._openAction) # Note use of actions, not text.
fileMenu.add(self._saveAction)
fileMenu.addSeparator()
fileMenu.add(self._exitAction)
#... Set window content and menu.
self.setContentPane(content)
self.setJMenuBar(menuBar)
#... Set other window characteristics.
self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
self.setTitle("NutPad")
self.pack()
self.setLocationRelativeTo(None)
self.visible=1
#//////////////////////////////////////////////// inner class OpenAction
class OpenAction(AbstractAction):
#============================================= constructor
def __init__(self,outer): # outer instance.
AbstractAction.__init__(self,"Open...")
self.outer=outer
self.putValue(AbstractAction.MNEMONIC_KEY, Integer(ord('O')))
#========================================= actionPerformed
def actionPerformed(self, e):
retval = self.outer._fileChooser.showOpenDialog(self.outer)
if retval==JFileChooser.APPROVE_OPTION:
f = self.outer._fileChooser.getSelectedFile()
try:
reader = FileReader(f)
self.outer._editArea.read(reader, "") # Use TextComponent read
except IOException,ioex:
System.out.println(e);
System.exit(1);
#////////////////////////////////////////////////// inner class SaveAction
class SaveAction(AbstractAction):
#============================================= constructor
def __init__(self,outer):
AbstractAction.__init__(self,"Save...")
self.outer=outer
self.putValue(AbstractAction.MNEMONIC_KEY, Integer(ord('S')))
#========================================= actionPerformed
def actionPerformed(self, e):
retval = self.outer._fileChooser.showSaveDialog(self.outer)
if retval == JFileChooser.APPROVE_OPTION:
f = self.outer._fileChooser.getSelectedFile()
try:
writer = FileWriter(f)
self.outer._editArea.write(writer) # TextComponent write
except IOException,ioex:
JOptionPane.showMessageDialog(self.outer, ioex)
System.exit(1)
#/////////////////////////////////////////////////// inner class ExitAction
class ExitAction(AbstractAction):
#============================================= constructor
def __init__(self,outer):
AbstractAction.__init__(self,"Exit")
self.outer=outer
self.putValue(AbstractAction.MNEMONIC_KEY, Integer(ord('X')))
#========================================= actionPerformed
def actionPerformed(self, e):
System.exit(0);
#===================================================================== main
if __name__=="__main__":
NutPad()