Differences between revisions 7 and 8
Revision 7 as of 2014-04-29 07:57:42
Size: 11197
Editor: AdamBurke
Comment:
Revision 8 as of 2014-05-18 04:12:32
Size: 295
Editor: BF84
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#format wiki
#language en
#pragma section-numbers off

= Swing Sampler =

SwingExamples

<<TableOfContents>>

----

Stored here for posterity's sake it was found on http://hcc.cc.gatech.edu/documents/230_Edwards_swing-sampler.py
and the nature of the web being what it is who knows how long it would be there or if I could find it again.
This is exactly as I found it. I have verified that it works with Jython 2.2 with Java JVM 1.5 & 1.6 and based on the code I suspect it would work with a 1.4.2 JVM

{{{
#
# This code shows a sampler of common Java Swing widget types. This is
# by no means all of the available widgets. For documentation and tutorials
# on the underlying Java classes, see http://java.sun.com/products/jfc/
#

#
# We'll be using swing a lot, so import it as "swing". Swing is built using
# an older Java GUI toolkit called awt, so we'll need it too. One of the
# examples here also uses the Java networking package (you're unlikely to
# need that for the project...)
#
import javax.swing as swing
import java.awt as awt
import java.net as net
import sys

#
# I've organized the sampler code into a single class, called SwingSampler.
# The __init__ function (called the "constructor") does all of the setup.
# Note that __init__, like all other functions in a class (called "methods")
# takes "self" as its first argument.
#
class SwingSampler:
 def __init__(self):
  #########################################################
  #
  # set up the overall frame (the window itself)
  #
  self.window = swing.JFrame("Swing Sampler!")
  self.window.windowClosing = self.goodbye
  self.window.contentPane.layout = awt.BorderLayout()

  #########################################################
  #
  # under this will be a tabbed pane; each tab is named
  # and contains a panel with other stuff in it.
  #
  tabbedPane = swing.JTabbedPane()
  self.window.contentPane.add("Center", tabbedPane);

  #########################################################
  #
  # The first tabbed panel will be named "Some Basic
  # Widgets", and is referenced by variable 'firstTab'
  #
  firstTab = swing.JPanel()
  firstTab.layout = awt.BorderLayout()
  tabbedPane.addTab("Some Basic Widgets", firstTab)

  #
  # slap in some labels, a list, a text field, etc... Some
  # of these are contained in their own panels for
  # layout purposes.
  #
  tmpPanel = swing.JPanel()
  tmpPanel.layout = awt.GridLayout(3, 1)
  tmpPanel.border = swing.BorderFactory.createTitledBorder("Labels are simple")
  tmpPanel.add(swing.JLabel("I am a label. I am quite boring."))
  tmpPanel.add(swing.JLabel("<HTML><FONT COLOR='blue'>HTML <B>labels</B>
                                          </FONT> are <I>somewhat</I><U>less boring</U>.</HTML>"))
  tmpPanel.add(swing.JLabel("Labels can also be aligned", swing.JLabel.RIGHT))
  firstTab.add(tmpPanel, "North")

  #
  # Notice that the variable "tmpPanel" gets reused here.
  # This next line creates a new panel, but we reuse the
  # "tmpPanel" name to refer to it. The panel that
  # tmpPanel used to refer to still exists, but we no
  # longer have a way to name it (but that's ok, since
  # we don't need to refer to it any more).
  #
  tmpPanel = swing.JPanel()
  tmpPanel.layout = awt.BorderLayout()
  tmpPanel.border = swing.BorderFactory.createTitledBorder("Tasty tasty lists")

  #
  # Note that here we stash a reference to the list in
  # "self.list". This puts it in the scope of the object,
  # rather than this function. This is because we'll be
  # referring to it later from outside this function, so
  # it needs to be "bumped up a level."
  #
  self.listData = ( "January", "February", "March", "April", "May", "June", "July",
                                  "August", "September", "October", "November", "December" )
  self.list = swing.JList(self.listData)
  tmpPanel.add("Center", swing.JScrollPane(self.list))
  button = swing.JButton("What's Selected?")
  button.actionPerformed = self.whatsSelectedCallback;
  tmpPanel.add("East", button)
  firstTab.add("Center", tmpPanel)

  tmpPanel = swing.JPanel()
  tmpPanel.layout = awt.BorderLayout()

  #
  # The text field also goes in self, since the callback
  # that displays the contents will need to get at it.
  #
  # Also note that because the callback is a function inside
  # the SwingSampler object, you refer to it through self.
  # (The callback could potentially be outside the object,
  # as a top-level function. In that case you wouldn't
  # use the 'self' selector; any variables that it uses
  # would have to be in the global scope.
  #
  self.field = swing.JTextField()
  tmpPanel.add(self.field)
  tmpPanel.add(swing.JButton("Click Me", actionPerformed=self.clickMeCallback), "East")
  firstTab.add(tmpPanel, "South")

  #########################################################
  #
  # The second tabbed panel is next... This shows
  # how to build a basic web browser in about 20 lines.
  #
  secondTab = swing.JPanel()
  secondTab.layout = awt.BorderLayout()
  tabbedPane.addTab("HTML Fanciness", secondTab)

  tmpPanel = swing.JPanel()
  tmpPanel.add(swing.JLabel("Go to:"))
  self.urlField = swing.JTextField(40, actionPerformed=self.goToCallback)
  tmpPanel.add(self.urlField)
  tmpPanel.add(swing.JButton("Go!", actionPerformed=self.goToCallback))
  secondTab.add(tmpPanel, "North")

  #self.htmlPane = swing.JEditorPane("http://www.cc.gatech.edu", editable=0,
                                        hyperlinkUpdate=self.followHyperlink, preferredSize=(400, 400))
  self.htmlPane = swing.JEditorPane("http://www.jython.org", editable=0,
                                        hyperlinkUpdate=self.followHyperlink, preferredSize=(400, 400))
  secondTab.add(swing.JScrollPane(self.htmlPane), "Center")

  self.statusLine = swing.JLabel("")

  #########################################################
  #
  # The third tabbed panel is next...
  #
  thirdTab = swing.JPanel()
  tabbedPane.addTab("Other Widgets", thirdTab)

  imageLabel = swing.JLabel(swing.ImageIcon(net.URL("http://www.gatech.edu/images/logo-gatech.gif")))
  imageLabel.toolTipText = "Labels can have images! Every widget can have a tooltip!"
  thirdTab.add(imageLabel)

  tmpPanel = swing.JPanel()
  tmpPanel.layout = awt.GridLayout(3, 2)
  tmpPanel.border = swing.BorderFactory.createTitledBorder("Travel Checklist")
  tmpPanel.add(swing.JCheckBox("Umbrella", actionPerformed=self.checkCallback))
  tmpPanel.add(swing.JCheckBox("Rain coat", actionPerformed=self.checkCallback))
  tmpPanel.add(swing.JCheckBox("Passport", actionPerformed=self.checkCallback))
  tmpPanel.add(swing.JCheckBox("Airline tickets", actionPerformed=self.checkCallback))
  tmpPanel.add(swing.JCheckBox("iPod", actionPerformed=self.checkCallback))
  tmpPanel.add(swing.JCheckBox("Laptop", actionPerformed=self.checkCallback))
  thirdTab.add(tmpPanel)

  tmpPanel = swing.JPanel()
  tmpPanel.layout = awt.GridLayout(4, 1)
  tmpPanel.border = swing.BorderFactory.createTitledBorder("My Pets")
  #
  # A ButtonGroup is used to indicate which radio buttons
  # go together.
  #
  buttonGroup = swing.ButtonGroup()

  radioButton = swing.JRadioButton("Dog", actionPerformed=self.radioCallback)
  buttonGroup.add(radioButton)
  tmpPanel.add(radioButton)

  radioButton = swing.JRadioButton("Cat", actionPerformed=self.radioCallback)
  buttonGroup.add(radioButton)
  tmpPanel.add(radioButton)
  
  radioButton = swing.JRadioButton("Pig", actionPerformed=self.radioCallback)
  buttonGroup.add(radioButton)
  tmpPanel.add(radioButton)

  radioButton = swing.JRadioButton("Capybara", actionPerformed=self.radioCallback)
  buttonGroup.add(radioButton)
  tmpPanel.add(radioButton)

  thirdTab.add(tmpPanel)
 
  self.window.pack()
  self.window.show()

 #
 # This is the callback that's run when the window closes. Here
 # we just exit. Note that either functions inside class
 # declarations or global functions can be callbacks. When they're
 # inside a class they talk 'self' as the first argument. Just
 # about all Swing callbacks also take an event argument as well.
 #
 def goodbye(self, event):
  print "Goodbye!"
  sys.exit()

 #
 # Callback for the "Click Me!" button on the first tab. This
 # creates a new window to display what was in the text field,
 # and then clears the text field.
 #
 def clickMeCallback(self, event):
  dialog = swing.JFrame("You clicked the button!")
  dialog.contentPane.layout = awt.BorderLayout()
  dialog.contentPane.add(swing.JLabel("Text was: " + self.field.text))
  dialog.size=(400, 200)
  dialog.show()
  print "Text is ", self.field.text
  self.field.text = ""

 #
 # Callback for the "What's Selected?" button. This pops up a
 # window that shows the contents and index of the selected item.
 #
 def whatsSelectedCallback(self, event):
  dialog = swing.JFrame("Here's what's selected")
  dialog.contentPane.layout = awt.GridLayout(2, 1)
  dialog.contentPane.add(swing.JLabel("Selected value = " + str(self.list.selectedValue),
                                       swing.JLabel.CENTER))
  dialog.contentPane.add(swing.JLabel("Selected index = " + str(self.list.selectedIndex),
                                       swing.JLabel.CENTER))
  dialog.size=(400, 200)
  dialog.show()
  print "Selected value =", self.list.selectedValue, ", selected index =", self.list.selectedIndex;

 #
 # Callback for the "Go To" button; updates the contents of the
 # HTML pane.
 #
 def goToCallback(self, event):
  self.htmlPane.setPage(self.urlField.text)

 #
 # This callback is invoked whenever a link is clicked or moused
 # over. The event is a HyperlinkEvent, which means that it
 # defines certain fields and operations, which we can use below.
 #
 def followHyperlink(self, event):
  if event.eventType == swing.event.HyperlinkEvent.EventType.ACTIVATED:
   self.statusLine = event.URL.toString()
   self.htmlPane.setPage(event.URL)
  elif event.eventType == swing.event.HyperlinkEvent.EventType.ENTERED:
   self.statusLine = event.URL.toString()
  elif event.eventType == swing.event.HyperlinkEvent.EventType.EXITED:
   self.statusLine = ""

 #
 # This is a common technique when a bunch of widgets share a
 # single callback. You can look at the "source" field on the
 # event argument to see which widget generated the event.
 #
 def checkCallback(self, event):
  if event.source.selected:
   print event.source.text + " was CHECKED"
  else:
   print event.source.text + " was UNCHECKED"

 #
 # This is the callback for all the radio buttons.
 #
 def radioCallback(self, event):
  print event.source.text + " was clicked ON"


#
# This is how you make the main entry point for your program in Python.
# The system variable __name__ will be set to the string __main__ if
# this file is passed directly on the command line to Jython.
#
# Here, we simply create a SwingSampler, and it does everything from
# there.
#
if __name__ == "__main__":
 sampler = SwingSampler()
 
}}}
I'm Rudolf (19) from Sandnes, Norway. <<BR>>
I'm learning Danish literature at a local high school and I'm just about to graduate.<<BR>>
I have a part time job in a post office.<<BR>>
<<BR>>
Feel free to visit my site - [[http://gojocinema.com/profile.php?u=JiHorton|wifi password hacker]]

I'm Rudolf (19) from Sandnes, Norway.
I'm learning Danish literature at a local high school and I'm just about to graduate.
I have a part time job in a post office.

Feel free to visit my site - wifi password hacker

SwingSampler (last edited 2014-05-18 14:02:01 by AdamBurke)