<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FMVC_Pattern</id>
		<title>Java/Design Pattern/MVC Pattern - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FMVC_Pattern"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/MVC_Pattern&amp;action=history"/>
		<updated>2026-04-22T05:04:25Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Design_Pattern/MVC_Pattern&amp;diff=7807&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/MVC_Pattern&amp;diff=7807&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:48Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:50, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Design_Pattern/MVC_Pattern&amp;diff=7806&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/MVC_Pattern&amp;diff=7806&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== MVC Implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.&lt;br /&gt;
 * All rights reserved. Software written by Ian F. Darwin and others.&lt;br /&gt;
 * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS&amp;quot;&amp;quot;&lt;br /&gt;
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED&lt;br /&gt;
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS&lt;br /&gt;
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;br /&gt;
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;br /&gt;
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;br /&gt;
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;br /&gt;
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;br /&gt;
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;br /&gt;
 * POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 * &lt;br /&gt;
 * Java, the Duke mascot, and all variants of Sun&amp;quot;s Java &amp;quot;steaming coffee&lt;br /&gt;
 * cup&amp;quot; logo are trademarks of Sun Microsystems. Sun&amp;quot;s, and James Gosling&amp;quot;s,&lt;br /&gt;
 * pioneering role in inventing and promulgating (and standardizing) the Java &lt;br /&gt;
 * language and environment is gratefully acknowledged.&lt;br /&gt;
 * &lt;br /&gt;
 * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&amp;amp;T, for&lt;br /&gt;
 * inventing predecessor languages C and C++ is also gratefully acknowledged.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.event.ChangeEvent;&lt;br /&gt;
import javax.swing.event.ChangeListener;&lt;br /&gt;
/**&lt;br /&gt;
 * MVC Implementation&lt;br /&gt;
 * &lt;br /&gt;
 * @author Ian Darwin, http://www.darwinsys.ru/&lt;br /&gt;
 * @version $Id: MVCDemo.java,v 1.3 2004/03/21 00:44:36 ian Exp $&lt;br /&gt;
 */&lt;br /&gt;
public class MVCDemo {&lt;br /&gt;
  /** &amp;quot;main program&amp;quot; method - construct and show */&lt;br /&gt;
  public static void main(String[] av) {&lt;br /&gt;
    // Create the data model&lt;br /&gt;
    final Model model = new Model();&lt;br /&gt;
    // create a JFrame to hold it all.&lt;br /&gt;
    final JFrame f = new JFrame(&amp;quot;MVC&amp;quot;);&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Container cp = f.getContentPane();&lt;br /&gt;
    JPanel tp = new JPanel();&lt;br /&gt;
    cp.add(tp, BorderLayout.NORTH);&lt;br /&gt;
    tp.add(new JLabel(&amp;quot;New value:&amp;quot;));&lt;br /&gt;
    final JTextField tf = new JTextField(10);&lt;br /&gt;
    tp.add(tf);&lt;br /&gt;
    tf.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent evt) {&lt;br /&gt;
        model.add(tf.getText());&lt;br /&gt;
        tf.setText(&amp;quot;&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    // The first View is a JTextArea subclassed to have&lt;br /&gt;
    // an easy way of setting the data from a java.util.List&lt;br /&gt;
    final TextView tv = new TextView();&lt;br /&gt;
    model.addChangeListener(new ChangeListener() {&lt;br /&gt;
      public void stateChanged(ChangeEvent evt) {&lt;br /&gt;
        Object o = evt.getSource();&lt;br /&gt;
        Model m = (Model) o;&lt;br /&gt;
        tv.setListData(m.getData());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    tv.setBackground(Color.RED);&lt;br /&gt;
    tv.setSize(100, 100);&lt;br /&gt;
    p.add(tv);&lt;br /&gt;
    // The second View is the simplistic Grapher program from&lt;br /&gt;
    // the Java Cookbook &amp;quot;Graphics&amp;quot; chapter (../graphics/Grapher.java)&lt;br /&gt;
    final Grapher vv = new Grapher();&lt;br /&gt;
    model.addChangeListener(new ChangeListener() {&lt;br /&gt;
      public void stateChanged(ChangeEvent evt) {&lt;br /&gt;
        Object o = evt.getSource();&lt;br /&gt;
        Model m = (Model) o;&lt;br /&gt;
        vv.setListData(m.getData());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    vv.setBackground(Color.YELLOW);&lt;br /&gt;
    vv.setSize(100, 100);&lt;br /&gt;
    p.add(vv);&lt;br /&gt;
    cp.add(p, BorderLayout.CENTER);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setLocation(100, 100);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class TextView extends JTextArea {&lt;br /&gt;
  public TextView() {&lt;br /&gt;
    super(20, 20);&lt;br /&gt;
  }&lt;br /&gt;
  public void setListData(ArrayList l) {&lt;br /&gt;
    setText(&amp;quot;&amp;quot;);&lt;br /&gt;
    for (int i = 0; i &amp;lt; l.size(); i++) {&lt;br /&gt;
      append((String) l.get(i));&lt;br /&gt;
      append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Model {&lt;br /&gt;
  private ArrayList list = new ArrayList();&lt;br /&gt;
  public void add(String s) {&lt;br /&gt;
    list.add(s);&lt;br /&gt;
    fireChange();&lt;br /&gt;
  }&lt;br /&gt;
  public ArrayList getData() {&lt;br /&gt;
    return list;&lt;br /&gt;
  }&lt;br /&gt;
  // Sun recommends using javax.swing.EventListenerList, but this is easier&lt;br /&gt;
  ArrayList changeListeners = new ArrayList();&lt;br /&gt;
  public void addChangeListener(ChangeListener cl) {&lt;br /&gt;
    changeListeners.add(cl);&lt;br /&gt;
  }&lt;br /&gt;
  public void removeChangeListener(ChangeListener cl) {&lt;br /&gt;
    changeListeners.remove(cl);&lt;br /&gt;
  }&lt;br /&gt;
  protected void fireChange() {&lt;br /&gt;
    ChangeEvent evt = new ChangeEvent(this);&lt;br /&gt;
    for (int i = 0; i &amp;lt; changeListeners.size(); i++) {&lt;br /&gt;
      ChangeListener cl = (ChangeListener) changeListeners.get(i);&lt;br /&gt;
      cl.stateChanged(evt);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Grapher extends JPanel {&lt;br /&gt;
  /** Multiplier for range to allow room for a border */&lt;br /&gt;
  public final static double BORDERFACTOR = 1.1f;&lt;br /&gt;
  /** The list of Point points. */&lt;br /&gt;
  protected ArrayList data;&lt;br /&gt;
  /** The minimum and maximum X values */&lt;br /&gt;
  protected double minx = Integer.MAX_VALUE, maxx = Integer.MIN_VALUE;&lt;br /&gt;
  /** The minimum and maximum Y values */&lt;br /&gt;
  protected double miny = Integer.MAX_VALUE, maxy = Integer.MIN_VALUE;&lt;br /&gt;
  /** The range of X and Y values */&lt;br /&gt;
  protected double xrange, yrange;&lt;br /&gt;
  public Grapher() {&lt;br /&gt;
    data = new ArrayList();&lt;br /&gt;
    figure();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Set the list data from a list of Strings, where the x coordinate is&lt;br /&gt;
   * incremented automatically, and the y coordinate is made from the String&lt;br /&gt;
   * in the list.&lt;br /&gt;
   */&lt;br /&gt;
  public void setListDataFromYStrings(ArrayList newData) {&lt;br /&gt;
    data.clear();&lt;br /&gt;
    for (int i = 0; i &amp;lt; newData.size(); i++) {&lt;br /&gt;
      Point2D p = new Point2D.Double();&lt;br /&gt;
      p.setLocation(i, java.lang.Double.parseDouble((String) newData&lt;br /&gt;
          .get(i)));&lt;br /&gt;
      data.add(p);&lt;br /&gt;
    }&lt;br /&gt;
    figure();&lt;br /&gt;
  }&lt;br /&gt;
  /** Set the list from an existing List, as from GraphReader.read() */&lt;br /&gt;
  public void setListData(ArrayList newData) {&lt;br /&gt;
    data = newData;&lt;br /&gt;
    figure();&lt;br /&gt;
  }&lt;br /&gt;
  /** Compute new data when list changes */&lt;br /&gt;
  private void figure() {&lt;br /&gt;
    // find min &amp;amp; max&lt;br /&gt;
    for (int i = 0; i &amp;lt; data.size(); i++) {&lt;br /&gt;
      Point2D d = (Point2D) data.get(i);&lt;br /&gt;
      if (d.getX() &amp;lt; minx)&lt;br /&gt;
        minx = d.getX();&lt;br /&gt;
      if (d.getX() &amp;gt; maxx)&lt;br /&gt;
        maxx = d.getX();&lt;br /&gt;
      if (d.getY() &amp;lt; miny)&lt;br /&gt;
        miny = d.getY();&lt;br /&gt;
      if (d.getY() &amp;gt; maxy)&lt;br /&gt;
        maxy = d.getY();&lt;br /&gt;
    }&lt;br /&gt;
    // Compute ranges&lt;br /&gt;
    xrange = (maxx - minx) * BORDERFACTOR;&lt;br /&gt;
    yrange = (maxy - miny) * BORDERFACTOR;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Called when the window needs painting. Computes X and Y range, scales.&lt;br /&gt;
   */&lt;br /&gt;
  public void paintComponent(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    Dimension s = getSize();&lt;br /&gt;
    if (data.size() &amp;lt; 2) {&lt;br /&gt;
      g.drawString(&amp;quot;Insufficient data: &amp;quot; + data.size(), 10, 40);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // Compute scale factors&lt;br /&gt;
    double xfact = s.width / xrange;&lt;br /&gt;
    double yfact = s.height / yrange;&lt;br /&gt;
    // Scale and plot the data&lt;br /&gt;
    for (int i = 0; i &amp;lt; data.size(); i++) {&lt;br /&gt;
      Point2D d = (Point2D) data.get(i);&lt;br /&gt;
      double x = (d.getX() - minx) * xfact;&lt;br /&gt;
      double y = (d.getY() - miny) * yfact;&lt;br /&gt;
      // Draw a 5-pixel rectangle centered, so -2 both x and y.&lt;br /&gt;
      // AWT numbers Y from 0 down, so invert:&lt;br /&gt;
      g.drawRect(((int) x) - 2, s.height - 2 - (int) y, 5, 5);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public Dimension getPreferredSize() {&lt;br /&gt;
    return new Dimension(150, 150);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) throws IOException {&lt;br /&gt;
    final JFrame f = new JFrame(&amp;quot;Grapher&amp;quot;);&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Grapher grapher = new Grapher();&lt;br /&gt;
    f.setContentPane(grapher);&lt;br /&gt;
    f.setLocation(100, 100);&lt;br /&gt;
    f.pack();&lt;br /&gt;
    ArrayList data = new ArrayList();&lt;br /&gt;
        data.add(&amp;quot;a&amp;quot;);&lt;br /&gt;
    grapher.setListData(data);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MVC Loop ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002. All rights&lt;br /&gt;
 * reserved. Software written by Ian F. Darwin and others. $Id: LICENSE,v 1.8&lt;br /&gt;
 * 2004/02/09 03:33:38 ian Exp $&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright notice,&lt;br /&gt;
 * this list of conditions and the following disclaimer. 2. Redistributions in&lt;br /&gt;
 * binary form must reproduce the above copyright notice, this list of&lt;br /&gt;
 * conditions and the following disclaimer in the documentation and/or other&lt;br /&gt;
 * materials provided with the distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS&amp;quot;&amp;quot; AND ANY&lt;br /&gt;
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED&lt;br /&gt;
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE&lt;br /&gt;
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY&lt;br /&gt;
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES&lt;br /&gt;
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;&lt;br /&gt;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND&lt;br /&gt;
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 * &lt;br /&gt;
 * Java, the Duke mascot, and all variants of Sun&amp;quot;s Java &amp;quot;steaming coffee cup&amp;quot;&lt;br /&gt;
 * logo are trademarks of Sun Microsystems. Sun&amp;quot;s, and James Gosling&amp;quot;s,&lt;br /&gt;
 * pioneering role in inventing and promulgating (and standardizing) the Java&lt;br /&gt;
 * language and environment is gratefully acknowledged.&lt;br /&gt;
 * &lt;br /&gt;
 * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&amp;amp;T, for&lt;br /&gt;
 * inventing predecessor languages C and C++ is also gratefully acknowledged.&lt;br /&gt;
 */&lt;br /&gt;
// Investigate if you can get into a loop with a Swing-based MVC app;&lt;br /&gt;
// in particular, if you do setSelectedIndex on a choice, does it&lt;br /&gt;
// generate a secondary event? Push the button and see!&lt;br /&gt;
// If it does, you must be careful to avoid event propagation loops.&lt;br /&gt;
// This example doesn&amp;quot;t show it, but you can loop with other implementations.&lt;br /&gt;
// For example, if a changed() method updates the model&amp;quot;s data.&lt;br /&gt;
import java.awt.Button;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.FlowLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class MVCLoop {&lt;br /&gt;
  public static void main(String[] a) {&lt;br /&gt;
    Button b;&lt;br /&gt;
    final JComboBox ch;&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;Testing&amp;quot;);&lt;br /&gt;
    Container cp = f.getContentPane();&lt;br /&gt;
    cp.setLayout(new FlowLayout());&lt;br /&gt;
    b = new Button(&amp;quot;Set&amp;quot;);&lt;br /&gt;
    ch = new JComboBox();&lt;br /&gt;
    cp.add(b);&lt;br /&gt;
    b.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        int cur = ch.getSelectedIndex();&lt;br /&gt;
        int len = ch.getItemCount();&lt;br /&gt;
        cur++;&lt;br /&gt;
        cur %= len;&lt;br /&gt;
        ch.setSelectedIndex(cur);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    ch.addItem(&amp;quot;En/ett&amp;quot;);&lt;br /&gt;
    ch.addItem(&amp;quot;Zwei&amp;quot;);&lt;br /&gt;
    ch.addItem(&amp;quot;Tres&amp;quot;);&lt;br /&gt;
    ch.addItem(&amp;quot;Four&amp;quot;);&lt;br /&gt;
    ch.addItem(&amp;quot;Funf&amp;quot;);&lt;br /&gt;
    ch.addItem(&amp;quot;Seis&amp;quot;);&lt;br /&gt;
    ch.addItem(&amp;quot;Siete&amp;quot;);&lt;br /&gt;
    ch.addItem(&amp;quot;Octo&amp;quot;);&lt;br /&gt;
    cp.add(ch);&lt;br /&gt;
    ch.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        System.out.println(e);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    f.pack();&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MVC Pattern in Java 2 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//[C] 2002 Sun Microsystems, Inc.---&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
public class RunMVCPattern {&lt;br /&gt;
    public static void main(String [] arguments){&lt;br /&gt;
        System.out.println(&amp;quot;Example for the MVC pattern&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;In this example, a Contact is divided into&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; Model, View and Controller components.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;To illustrate the flexibility of MVC, the same&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; Model will be used to provide information&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; to two View components.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;One view, ContactEditView, will provide a Contact&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; editor window and will be paired with a controller&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; called ContactEditController.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;The other view, ContactDisplayView, will provide a&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; display window which will reflect the changes made&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; in the editor window. This view does not support&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; user interaction, and so does not provide a controller.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating ContactModel&amp;quot;);&lt;br /&gt;
        ContactModel model = new ContactModel();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating ContactEditView and ContactEditController&amp;quot;);&lt;br /&gt;
        ContactEditView editorView = new ContactEditView(model);&lt;br /&gt;
        model.addContactView(editorView);&lt;br /&gt;
        createGui(editorView, &amp;quot;Contact Edit Window&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating ContactDisplayView&amp;quot;);&lt;br /&gt;
        ContactDisplayView displayView = new ContactDisplayView();&lt;br /&gt;
        model.addContactView(displayView);&lt;br /&gt;
        createGui(displayView, &amp;quot;Contact Display Window&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static void createGui(JPanel contents, String title){&lt;br /&gt;
        JFrame applicationFrame = new JFrame(title);&lt;br /&gt;
        applicationFrame.getContentPane().add(contents);&lt;br /&gt;
        applicationFrame.addWindowListener(new WindowCloseManager());&lt;br /&gt;
        applicationFrame.pack();&lt;br /&gt;
        applicationFrame.setVisible(true);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static class WindowCloseManager extends WindowAdapter{&lt;br /&gt;
        public void windowClosing(WindowEvent evt){&lt;br /&gt;
            System.exit(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//Model&lt;br /&gt;
class Contact{&lt;br /&gt;
    private String firstName;&lt;br /&gt;
    private String lastName;&lt;br /&gt;
    private String title;&lt;br /&gt;
    private String organization;&lt;br /&gt;
    &lt;br /&gt;
    private ContactView view;&lt;br /&gt;
    &lt;br /&gt;
    public Contact(ContactView v){&lt;br /&gt;
        &lt;br /&gt;
        firstName = &amp;quot;&amp;quot;;&lt;br /&gt;
        lastName = &amp;quot;&amp;quot;;&lt;br /&gt;
        title = &amp;quot;&amp;quot;;&lt;br /&gt;
        organization = &amp;quot;&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        view = v;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getFirstName(){&lt;br /&gt;
        return firstName;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getLastName(){&lt;br /&gt;
        return lastName;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getTitle(){&lt;br /&gt;
        return title;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getOrganization(){&lt;br /&gt;
        return organization;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName){&lt;br /&gt;
        firstName = newFirstName;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setLastName(String newLastName){&lt;br /&gt;
        lastName = newLastName;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setTitle(String newTitle){&lt;br /&gt;
        title = newTitle;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setOrganization(String newOrganization){&lt;br /&gt;
        organization = newOrganization;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void updateModel(String newFirstName,&lt;br /&gt;
        String newLastName, String newTitle,&lt;br /&gt;
        String newOrganization){&lt;br /&gt;
        &lt;br /&gt;
        if ((newFirstName != null) &amp;amp;&amp;amp; !newFirstName.equals(&amp;quot;&amp;quot;)){&lt;br /&gt;
            setFirstName(newFirstName);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if ((newLastName != null) &amp;amp;&amp;amp; !newLastName.equals(&amp;quot;&amp;quot;)){&lt;br /&gt;
            setLastName(newLastName);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if ((newTitle != null) &amp;amp;&amp;amp; !newTitle.equals(&amp;quot;&amp;quot;)){&lt;br /&gt;
            setTitle(newTitle);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if ((newOrganization != null) &amp;amp;&amp;amp; !newOrganization.equals(&amp;quot;&amp;quot;)){&lt;br /&gt;
            setOrganization(newOrganization);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        updateView();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void updateView(){&lt;br /&gt;
        view.refreshContactView(firstName, lastName, title, organization);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
interface ContactView{&lt;br /&gt;
    public void refreshContactView(String firstName,&lt;br /&gt;
        String lastName, String title, String organization);&lt;br /&gt;
}&lt;br /&gt;
class ContactModel{&lt;br /&gt;
    private String firstName;&lt;br /&gt;
    private String lastName;&lt;br /&gt;
    private String title;&lt;br /&gt;
    private String organization;&lt;br /&gt;
    private ArrayList contactViews = new ArrayList();&lt;br /&gt;
    &lt;br /&gt;
    public ContactModel(){&lt;br /&gt;
        this(null);&lt;br /&gt;
    }&lt;br /&gt;
    public ContactModel(ContactView view){&lt;br /&gt;
        firstName = &amp;quot;&amp;quot;;&lt;br /&gt;
        lastName = &amp;quot;&amp;quot;;&lt;br /&gt;
        title = &amp;quot;&amp;quot;;&lt;br /&gt;
        organization = &amp;quot;&amp;quot;;&lt;br /&gt;
        if (view != null){&lt;br /&gt;
            contactViews.add(view);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void addContactView(ContactView view){&lt;br /&gt;
        if (!contactViews.contains(view)){&lt;br /&gt;
            contactViews.add(view);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void removeContactView(ContactView view){&lt;br /&gt;
        contactViews.remove(view);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getFirstName(){ return firstName; }&lt;br /&gt;
    public String getLastName(){ return lastName; }&lt;br /&gt;
    public String getTitle(){ return title; }&lt;br /&gt;
    public String getOrganization(){ return organization; }&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName){ firstName = newFirstName; }&lt;br /&gt;
    public void setLastName(String newLastName){ lastName = newLastName; }&lt;br /&gt;
    public void setTitle(String newTitle){ title = newTitle; }&lt;br /&gt;
    public void setOrganization(String newOrganization){ organization = newOrganization; }&lt;br /&gt;
    &lt;br /&gt;
    public void updateModel(String newFirstName, String newLastName,&lt;br /&gt;
        String newTitle, String newOrganization){&lt;br /&gt;
        if (!isEmptyString(newFirstName)){&lt;br /&gt;
            setFirstName(newFirstName);&lt;br /&gt;
        }&lt;br /&gt;
        if (!isEmptyString(newLastName)){&lt;br /&gt;
            setLastName(newLastName);&lt;br /&gt;
        }&lt;br /&gt;
        if (!isEmptyString(newTitle)){&lt;br /&gt;
            setTitle(newTitle);&lt;br /&gt;
        }&lt;br /&gt;
        if (!isEmptyString(newOrganization)){&lt;br /&gt;
            setOrganization(newOrganization);&lt;br /&gt;
        }&lt;br /&gt;
        updateView();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private boolean isEmptyString(String input){&lt;br /&gt;
        return ((input == null) || input.equals(&amp;quot;&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void updateView(){&lt;br /&gt;
        Iterator notifyViews = contactViews.iterator();&lt;br /&gt;
        while (notifyViews.hasNext()){&lt;br /&gt;
            ((ContactView)notifyViews.next()).refreshContactView(firstName, lastName, title, organization);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class ContactEditView extends JPanel implements ContactView{&lt;br /&gt;
    private static final String UPDATE_BUTTON = &amp;quot;Update&amp;quot;;&lt;br /&gt;
    private static final String EXIT_BUTTON = &amp;quot;Exit&amp;quot;;&lt;br /&gt;
    private static final String CONTACT_FIRST_NAME = &amp;quot;First Name  &amp;quot;;&lt;br /&gt;
    private static final String CONTACT_LAST_NAME = &amp;quot;Last Name  &amp;quot;;&lt;br /&gt;
    private static final String CONTACT_TITLE = &amp;quot;Title  &amp;quot;;&lt;br /&gt;
    private static final String CONTACT_ORG = &amp;quot;Organization  &amp;quot;;&lt;br /&gt;
    private static final int FNAME_COL_WIDTH = 25;&lt;br /&gt;
    private static final int LNAME_COL_WIDTH = 40;&lt;br /&gt;
    private static final int TITLE_COL_WIDTH = 25;&lt;br /&gt;
    private static final int ORG_COL_WIDTH = 40;&lt;br /&gt;
    private ContactEditController controller;&lt;br /&gt;
    private JLabel firstNameLabel, lastNameLabel, titleLabel, organizationLabel;&lt;br /&gt;
    private JTextField firstName, lastName, title, organization;&lt;br /&gt;
    private JButton update, exit;&lt;br /&gt;
    &lt;br /&gt;
    public ContactEditView(ContactModel model){&lt;br /&gt;
        controller = new ContactEditController(model, this);&lt;br /&gt;
        createGui();&lt;br /&gt;
    }&lt;br /&gt;
    public ContactEditView(ContactModel model, ContactEditController newController){&lt;br /&gt;
        controller = newController;&lt;br /&gt;
        createGui();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void createGui(){&lt;br /&gt;
        update = new JButton(UPDATE_BUTTON);&lt;br /&gt;
        exit = new JButton(EXIT_BUTTON);&lt;br /&gt;
        &lt;br /&gt;
        firstNameLabel = new JLabel(CONTACT_FIRST_NAME);&lt;br /&gt;
        lastNameLabel = new JLabel(CONTACT_LAST_NAME);&lt;br /&gt;
        titleLabel = new JLabel(CONTACT_TITLE);&lt;br /&gt;
        organizationLabel = new JLabel(CONTACT_ORG);&lt;br /&gt;
        &lt;br /&gt;
        firstName = new JTextField(FNAME_COL_WIDTH);&lt;br /&gt;
        lastName = new JTextField(LNAME_COL_WIDTH);&lt;br /&gt;
        title = new JTextField(TITLE_COL_WIDTH);&lt;br /&gt;
        organization = new JTextField(ORG_COL_WIDTH);&lt;br /&gt;
        &lt;br /&gt;
        JPanel editPanel = new JPanel();&lt;br /&gt;
        editPanel.setLayout(new BoxLayout(editPanel, BoxLayout.X_AXIS));&lt;br /&gt;
        &lt;br /&gt;
        JPanel labelPanel = new JPanel();&lt;br /&gt;
        labelPanel.setLayout(new GridLayout(0, 1));&lt;br /&gt;
        &lt;br /&gt;
        labelPanel.add(firstNameLabel);&lt;br /&gt;
        labelPanel.add(lastNameLabel);&lt;br /&gt;
        labelPanel.add(titleLabel);&lt;br /&gt;
        labelPanel.add(organizationLabel);&lt;br /&gt;
        &lt;br /&gt;
        editPanel.add(labelPanel);&lt;br /&gt;
        &lt;br /&gt;
        JPanel fieldPanel = new JPanel();&lt;br /&gt;
        fieldPanel.setLayout(new GridLayout(0, 1));&lt;br /&gt;
        &lt;br /&gt;
        fieldPanel.add(firstName);&lt;br /&gt;
        fieldPanel.add(lastName);&lt;br /&gt;
        fieldPanel.add(title);&lt;br /&gt;
        fieldPanel.add(organization);&lt;br /&gt;
        &lt;br /&gt;
        editPanel.add(fieldPanel);&lt;br /&gt;
        &lt;br /&gt;
        JPanel controlPanel = new JPanel();&lt;br /&gt;
        controlPanel.add(update);&lt;br /&gt;
        controlPanel.add(exit);&lt;br /&gt;
        update.addActionListener(controller);&lt;br /&gt;
        exit.addActionListener(new ExitHandler());&lt;br /&gt;
        &lt;br /&gt;
        setLayout(new BorderLayout());&lt;br /&gt;
        add(editPanel, BorderLayout.CENTER);&lt;br /&gt;
        add(controlPanel, BorderLayout.SOUTH);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Object getUpdateRef(){ return update; }&lt;br /&gt;
    public String getFirstName(){ return firstName.getText(); }&lt;br /&gt;
    public String getLastName(){ return lastName.getText(); }&lt;br /&gt;
    public String getTitle(){ return title.getText(); }&lt;br /&gt;
    public String getOrganization(){ return organization.getText(); }&lt;br /&gt;
    &lt;br /&gt;
    public void refreshContactView(String newFirstName,&lt;br /&gt;
        String newLastName, String newTitle,&lt;br /&gt;
        String newOrganization){&lt;br /&gt;
        firstName.setText(newFirstName);&lt;br /&gt;
        lastName.setText(newLastName);&lt;br /&gt;
        title.setText(newTitle);&lt;br /&gt;
        organization.setText(newOrganization);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private class ExitHandler implements ActionListener{&lt;br /&gt;
        public void actionPerformed(ActionEvent event){&lt;br /&gt;
            System.exit(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class ContactEditController implements ActionListener{&lt;br /&gt;
    private ContactModel model;&lt;br /&gt;
    private ContactEditView view;&lt;br /&gt;
    &lt;br /&gt;
    public ContactEditController(ContactModel m, ContactEditView v){&lt;br /&gt;
        model = m;&lt;br /&gt;
        view = v;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void actionPerformed(ActionEvent evt){&lt;br /&gt;
        Object source = evt.getSource();&lt;br /&gt;
        if (source == view.getUpdateRef()){&lt;br /&gt;
            updateModel();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void updateModel(){&lt;br /&gt;
        String firstName = null;&lt;br /&gt;
        String lastName = null;&lt;br /&gt;
        if (isAlphabetic(view.getFirstName())){&lt;br /&gt;
            firstName = view.getFirstName();&lt;br /&gt;
        }&lt;br /&gt;
        if (isAlphabetic(view.getLastName())){&lt;br /&gt;
            lastName = view.getLastName();&lt;br /&gt;
        }&lt;br /&gt;
        model.updateModel( firstName, lastName,&lt;br /&gt;
            view.getTitle(), view.getOrganization());&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private boolean isAlphabetic(String input){&lt;br /&gt;
        char [] testChars = {&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;, &amp;quot;4&amp;quot;, &amp;quot;5&amp;quot;, &amp;quot;6&amp;quot;, &amp;quot;7&amp;quot;, &amp;quot;8&amp;quot;, &amp;quot;9&amp;quot;, &amp;quot;0&amp;quot;};&lt;br /&gt;
        for (int i = 0; i &amp;lt; testChars.length; i++){&lt;br /&gt;
            if (input.indexOf(testChars[i]) != -1){&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class ContactDisplayView extends JPanel implements ContactView{&lt;br /&gt;
    private JTextArea display;&lt;br /&gt;
    &lt;br /&gt;
    public ContactDisplayView(){&lt;br /&gt;
        createGui();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void createGui(){&lt;br /&gt;
        setLayout(new BorderLayout());&lt;br /&gt;
        display = new JTextArea(10, 40);&lt;br /&gt;
        display.setEditable(false);&lt;br /&gt;
        JScrollPane scrollDisplay = new JScrollPane(display);&lt;br /&gt;
        this.add(scrollDisplay, BorderLayout.CENTER);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void refreshContactView(String newFirstName,&lt;br /&gt;
        String newLastName, String newTitle, String newOrganization){&lt;br /&gt;
        display.setText(&amp;quot;UPDATED CONTACT:\nNEW VALUES:\n&amp;quot; +&lt;br /&gt;
            &amp;quot;\tName: &amp;quot; + newFirstName + &amp;quot; &amp;quot; + newLastName +&lt;br /&gt;
             &amp;quot;\n&amp;quot; + &amp;quot;\tTitle: &amp;quot; + newTitle + &amp;quot;\n&amp;quot; +&lt;br /&gt;
            &amp;quot;\tOrganization: &amp;quot; + newOrganization);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>