From 08848a284b4dae64bfdb110736d3bf3f57dfd861 Mon Sep 17 00:00:00 2001 From: david Date: Sun, 9 Jun 2002 15:39:44 +0000 Subject: [PATCH] Separated some functionality out into reusable classes, and built a simplistic, text-field oriented interface for major property groups. The JAR is now executable, so the program can be launched with java -jar fgfsclient.jar --- scripts/java/FGClient/build.xml | 2 +- scripts/java/FGClient/fgfsclient.jar | Bin 4513 -> 9080 bytes scripts/java/FGClient/main-class.txt | 2 + scripts/java/FGClient/src/FGFSDemo.java | 137 ++++++++++++++---- .../flightgear/fgfsclient/PropertyField.java | 59 ++++++++ .../flightgear/fgfsclient/PropertyPage.java | 48 ++++++ 6 files changed, 219 insertions(+), 29 deletions(-) create mode 100644 scripts/java/FGClient/main-class.txt create mode 100644 scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyField.java create mode 100644 scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyPage.java diff --git a/scripts/java/FGClient/build.xml b/scripts/java/FGClient/build.xml index 821728615..d10590f81 100644 --- a/scripts/java/FGClient/build.xml +++ b/scripts/java/FGClient/build.xml @@ -19,7 +19,7 @@ - + diff --git a/scripts/java/FGClient/fgfsclient.jar b/scripts/java/FGClient/fgfsclient.jar index c7b1ccd65cf03b24c52a289c8d28768c2f4b35e9..5f23d5ccbaf91f2516812230a41ab3de6ee421c0 100644 GIT binary patch delta 6914 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 -1) { + String name = tabs.getTitleAt(index); + PropertyPage page = (PropertyPage)pages.get(name); + try { + page.update(); + } catch (IOException e) { + } } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } } } diff --git a/scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyField.java b/scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyField.java new file mode 100644 index 000000000..14f215b06 --- /dev/null +++ b/scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyField.java @@ -0,0 +1,59 @@ +package org.flightgear.fgfsclient; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import java.io.IOException; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +public class PropertyField + extends JPanel +{ + + public PropertyField (FGFSConnection fgfs, + String name, + String caption) + { + this.fgfs = fgfs; + propertyName = name; + label = new JLabel(caption); + value = new JTextField(10); + value.addActionListener(new ActionListener () { + public void actionPerformed (ActionEvent ev) + { + try { + modify(); + grabFocus(); + } catch (IOException ex) { + System.err.println("Failed to update " + propertyName); + } + } + }); + + add(label); + add(value); + + } + + public void update () + throws IOException + { + if (!value.hasFocus()) + value.setText(fgfs.get(propertyName)); + } + + public void modify () + throws IOException + { + fgfs.set(propertyName, value.getText()); + } + + private FGFSConnection fgfs; + private String propertyName; + private JLabel label; + private JTextField value; + +} diff --git a/scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyPage.java b/scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyPage.java new file mode 100644 index 000000000..ec18c13ee --- /dev/null +++ b/scripts/java/FGClient/src/org/flightgear/fgfsclient/PropertyPage.java @@ -0,0 +1,48 @@ +package org.flightgear.fgfsclient; + +import java.io.IOException; + +import java.util.ArrayList; +import java.util.Iterator; + +import javax.swing.BoxLayout; +import javax.swing.JPanel; + +public class PropertyPage + extends JPanel +{ + + public PropertyPage (FGFSConnection fgfs, String name) + { + this.fgfs = fgfs; + this.name = name; + fields = new ArrayList(); + setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + } + + public String getName () + { + return name; + } + + public void addField (String name, String caption) + { + PropertyField field = new PropertyField(fgfs, name, caption); + add(field); + fields.add(field); + } + + public void update () + throws IOException + { + Iterator it = fields.iterator(); + while (it.hasNext()) { + ((PropertyField)it.next()).update(); + } + } + + private FGFSConnection fgfs; + private String name; + private ArrayList fields; + +} -- 2.39.5