This discussion is archived
1 2 Previous Next 21 Replies Latest reply: Apr 15, 2011 11:51 AM by 793415 RSS

Copy in sand-boxed app. in 1.6.0_24+

793415 Pro
Currently Being Moderated
<ul>
<li>Problem Summary
<li>Question
<li>Typical Output
<li>See Also
<li>Accumulated Results
<ul>
<li>Not grabbing focus
<li>Grabbing focus
</ul>
<li>Source
<ul>
<li>PropertyProbe.java
<li>propertyprobe.jnlp
<li>js.html
<li>Java Scripts
</ul>
<li>Post Revisions
</ul>

<h2><a name="summary"></a>Problem Summary</h2>
A security bug was fixed recently in the JRE (1.6.0_24 in Sun's JRE). The result of the fix is that sand-boxed apps. no longer provide 'Ctrl-c' copy (or cut/paste) functionality by default on text output controls like JTextArea & JTable.

While Ctrl-c copy no longer works by default, it is possible to add the functionality back in for any applet run in a 'Next Generation' Java Plug-In. Since Java Web Start existed, JWS provided sand-boxed copy via. the JNLP API's javax.jnlp.ClipboardService, & since Sun 1.6.0_10, & the next gen. plug-in, embedded applets can be deployed using JWS & can access the JNLP API.

I have redesigned an applet that relied on the old functionality, to now use the JNLP API Services if available.

<h2><a name="question"></a>Question</h2>

Does it work for you?

To answer that question:
<ol>
<li>Surf on over to the applet at http://pscode.org/prop/js.html and attempt to copy the data. See the instructions in the page for details of how to copy using the old and new forms of the applet. If the button appears, you should be prompted as to whether to allow the copy.
<li>Paste the data here (assuming the copy is successful). Or report if it fails to copy or the applet fails to appear.
</ol>

<h2><a name="egoutput"></a>Typical Output</h2>
This is what you might see at the applet.
||Property||Value||
|java.version|1.6.0_24|
|java.vendor|Sun Microsystems Inc.|
|os.name|Windows 7|
|os.version|6.1|

<h2><a name="related"></a>See Also</h2>
This relates to the thread Copy & Paste Function in Java JDK 6 Update 24. That thread contains some interesting comments, including:
<ul>
<li>A link to Sami Koivu's blog entry that explains the security bug.
<li>My Re: Copy & Paste Function in Java JDK 6 Update 24 table.
</ul>

<h2><a name="results"></a>Accumulated Results</h2>

<p>The first form of the applet showed a variety of problems with 'post copy focus', if the security prompt appeared in the JWS form of the applet.

<h3><a name="nograbfocus"></a>Not grabbing focus</h3>
||Reporter||Browser||Version||OS name||OS version||Java Vendor||Java version||Focus post dialog||Comments||
|Andrew Thompson|IE|8.0.7600.16385|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_24|applet|(1)|
|Andrew Thompson|Chrome|10.0.648.151|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_24|page|(2)|
|Andrew Thompson|FF|3.6.16|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_24|*nothing*|(3)|
|Walter Laan|FF|3.6.16|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_20|*locked*|(4)|
|almightywiz|FF|3.6.16|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_24|?|(5)|
|camickr|IE|8|Windows XP|5.1|Sun Microsystems Inc.|1.6.0_07|N/A|(6)|
|Christian|FF|3.6.15|Windows XP|5.1|Sun Microsystems Inc.|1.6.0_24|no problems|(7)|
|Walter Laan|?|?|Windows XP|5.1|Sun Microsystems Inc.|1.7.0-ea|page?|(8)|
|abillconsl|FF|3.6.13|Windows XP|5.1|Sun Microsystems Inc.|1.6.0_12|?|(9)|

<ol>
<li>Makes 'Ding' sound when copying the alert is dismissed (who said MS was not security conscious?).
<li>The only way to refocus the applet in Chrome is to click in it with the mouse.
<li>'Alt space' allowed me to minimize/restore FF, but no key combo. I could think of would restore focus to controls in the browser or applet.
<li>Reported serious problems with focus for FF on 1st start-up using 1.6.0_20 JRE. Unable to reproduce on the 1.6.0_24 JRE. Ref. {message:id=9470476}, {message:id=9470587}
<li>Reported no problems with focus. Ref. {message:id=9470371}
<li>1st report for a pre plug-in2 JRE. IE 8 produced no prompts (as expected), so the 'Focus post dialog' does not apply. No auditory warnings. Ref. {message:id=9470761}
<li>'No problems with focus.'. Ref. {message:id=9474121}
<li>Focus returned to page, presumably. Ref. {message:id=9474513}
<li>Ctrl-a seemed to do nothing. No mention of focus. Ref. {message:id=9477829}
</ol>

<h3><a name="grabfocus"></a>Grabbing focus</h3>

<p>The second form of the applet has a provision to grab the focus immediately after the copy (and presumably after the trust dialog).

||Reporter||Browser||Version||OS name||OS version||Java Vendor||Java version||Focus post dialog||Comments||
|camickr|IE|8|Windows XP|5.1|Sun Microsystems Inc.|1.6.0_07|N/A|(1)|
|Andrew Thompson|IE|8.0.7600.16385|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_24|applet|-|
|Andrew Thompson|Chrome|10.0.648.151|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_24|applet|-|
|Andrew Thompson|FF|3.6.16|Windows 7|6.1|Sun Microsystems Inc.|1.6.0_24|applet|-|
|PaĆ­lo Ebermann|FF?|?|Linux2.6.34.7-0.7-desktop|2.6.34.7-0.7-desktop|Sun Microsystems Inc.|1.6.0_20|?|(2)|
|bogdana|IE|9.0.8112.16421|Windows 7 |6.1|Sun Microsystems Inc.|1.6.0_22 |applet|(3)|

<ol>
<li>The first result for camickr can be inferred from the fact that a pre plug-in2 applet should behave the same in both forms of the applet. Ref. {message:id=9470761}
<li>There are further updates on that thread that have not yet been reflected here. See the thread for details. Ref. P.E. comments at SO
<li>Also reported the auditory warning in IE when dialog disappears. Ref. {message:id=9488352}
</ol>

----------------------

<h3><a name="java"></a>PropertyProbe.java</h3>
package org.pscode.tool.property;

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.StringSelection;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.EmptyBorder;

import java.util.Locale;

import java.security.AccessControlException;

import javax.jnlp.*;

/** Adds a comma delimited list of property names defined in the
props param, to the constructor of a new PropertiesPanel and
displays it. */
public class PropertyProbe extends JApplet {

    static String[] defaultProps = {
        "os.name",
        "os.version",
        "os.arch",
        "java.vendor",
        "java.version",
        "java.vm.version",
        "default_locale",
        "display_mode",
        "win.highContrast.on",
        "win.text.fontSmoothingOn",
        "win.defaultGUI.font",
        "awt.font.desktophints",
        "awt.mouse.numButtons",
        "awt.multiClickInterval"
    };

    public void init() {
        String propertyNames = getParameter("prop");
        String[] props;
        if (propertyNames==null) {
            //getContentPane().add( new JLabel("Must specify 'prop' to query!") );
            props = defaultProps;
        } else {
            props = propertyNames.split(",");
        }
        boolean grabFocus = getParameter("jnlp.grab.focus")!=null;
        System.out.println("jnlp.grab.focus: " + grabFocus);
        boolean jnlpServicesAvailable = getParameter("jnlp.launched")!=null;
        PropertyPanel pp = new PropertyPanel(props, jnlpServicesAvailable, grabFocus);
        pp.setPreferredSize(new Dimension(200,140));
        getContentPane().add( pp );
        validate();
    }

    public static void main(final String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                String[] props = defaultProps;
                if (args.length>0) {
                    props = args;
                }
                boolean jnlpServicesAvailable = false;
                try {
                    Class.forName("javax.jnlp.ServiceManager");
                    jnlpServicesAvailable = true;
                    System.out.println("JNLP services available!");
                } catch(Throwable t) {
                    t.printStackTrace();
                    System.out.println("JNLP services ***NOT*** available!");
                }

                PropertyPanel pp = new PropertyPanel(props, jnlpServicesAvailable, false);
                pp.setPreferredSize(new Dimension(200,200));
                JPanel mainPanel = new JPanel(new BorderLayout());
                mainPanel.setPreferredSize(new Dimension(400,200));
                mainPanel.add( pp );
                JFrame f = new JFrame("Property Probe");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setContentPane(mainPanel);
                f.pack();
                try {
                    f.setLocation(50,50);
                    f.setLocationRelativeTo(null);
                    f.setLocationByPlatform(true);
                    f.setMinimumSize( f.getSize() );
                } catch(Exception e) {
                }
                f.setVisible(true);
            }
        };
        EventQueue.invokeLater(r);
    }
}

class PropertyPanel extends JPanel {

    /** The JNLP API service used for copy in apps. deployed using JWS. */
    private ClipboardService clipboardService;
    private boolean grabFocus = false;
    private JTable table;

    /** A widget (JTable) of values for properties specified in the
    array of property names.  The properties are sourced from the
    system, environment and AWT toolkit properties.If there is no
    value defined in one of those three, 'null' is displayed. */
    PropertyPanel(String[] props, boolean jnlpServicesAvailable, boolean grabFocus) {
        super(new BorderLayout());
        this.grabFocus = grabFocus;
        setBorder( new EmptyBorder(5,5,5,5) );
        String[][] propValuePairs = new String[props.length][2];
        for ( int ii=0; ii<props.length; ii++ ) {
            propValuePairs[ii][0] = props[ii];
            propValuePairs[ii][1] = getProperty( props[ii] );
        }
        String[] header = {"Property","Value"};
        table = new JTable( propValuePairs, header );
        try {
            table.setAutoCreateRowSorter(true);
        } catch (Exception e) {
            // pre 1.6 JRE, go with an unsorted table
        }
        this.add( new JScrollPane( table ) );

        if (jnlpServicesAvailable) {
            try {
                clipboardService =
                    (ClipboardService)ServiceManager.
                        lookup("javax.jnlp.ClipboardService");

                Action action = new CopyAction(
                    "Copy",
                    null,
                    "Copy data",
                    new Integer(KeyEvent.VK_CONTROL+KeyEvent.VK_C));
                table.getActionMap().put( "copy", action );;
                final JButton copy = new JButton("Copy to clipboard");
                copy.setMnemonic('c');
                copy.addActionListener( action );
                JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
                bottomPanel.add(copy);
                add(bottomPanel, BorderLayout.SOUTH);
            // Expecting only javax.jnlp.UnavailableServiceException.  But if we
            // try to catch it, we get a NoClassDefFoundError in non JWS apps.!
            } catch(Throwable use) {
                use.printStackTrace();
                System.err.println("Copy services not available.  Copy using 'Ctrl-c'.");
            }
        }

    }

    /** Check for properties in the order of the toolkit, system
    then environment, on the basis that all the toolkit properties
    are    available to sandboxed apps., as well as some of the system
    properties, but none of the environment properties. */
    public String getProperty(String prop) {
        String value = null;

        if ( prop.equals("default_locale") ) {
            return Locale.getDefault().toString();
        }

        if ( prop.equals("display_mode") ) {
            return getDisplayModeString();
        }

        value = getDesktopProperty(prop);
        if (value!=null) {
            return value;
        }
        value = getSystemProperty(prop);
        if (value!=null) {
            return value;
        }
        value = getEnvironmentProperty(prop);
        if (value!=null) {
            return value;
        }
        return "null";
    }

    public String getSystemProperty( String prop ) {
        try {
            return System.getProperty( prop );
        } catch(AccessControlException ace) {
            // this property is either restricted, /or/ 'null'
            // the plug-in will not reveal which, for a sandboxed
            // app.
            return "unknown";
        }
    }

    public String getEnvironmentProperty(String prop) {
        try {
            Object value = System.getenv().get(prop);
            if (value==null) {
                return null;
            } else {
                return value.toString();
            }
        } catch(AccessControlException ace) {
            return null;
        }
    }

    public String getDesktopProperty(String prop) {
        Object value = Toolkit.
            getDefaultToolkit().
            getDesktopProperty(prop);
        if (value==null) {
            return null;
        } else {
            return value.toString();
        }
    }

    public String getDisplayModeString() {
        DisplayMode dm = GraphicsEnvironment.
            getLocalGraphicsEnvironment().
            getDefaultScreenDevice().
            getDisplayMode();
        String value =
            dm.getWidth()
            +
            "x"
            +
            dm.getHeight()
            +
            " "
            +
            dm.getRefreshRate()
            +
            "Hz "
            +
            dm.getBitDepth()
            +
            "bit"
            ;
        return value;
    }

    public void copyData(Component source) {
        TableModel model = table.getModel();

        StringBuilder sb = null;
        if (true) {
            sb = new StringBuilder();
            for (int ii=0; ii<model.getRowCount(); ii++) {
                for (int jj=0; jj<model.getColumnCount(); jj++) {
                    sb.append( model.getValueAt(ii,jj).toString() );
                    sb.append( "\t" );
                }
                sb.append( "\n" );
            }
        }
        String s = sb.toString();
        if (s==null || s.trim().length()==0) {
            JOptionPane.showMessageDialog(this,
                "There is no data in the table!");
        } else {
            StringSelection selection =
                new StringSelection(s);
            clipboardService.setContents( selection );
        }
        if (grabFocus) {
            source.requestFocus();
        }
    }

    class CopyAction extends AbstractAction {

        public CopyAction(String text, ImageIcon icon,
            String desc, Integer mnemonic) {
            super(text, icon);
            putValue(SHORT_DESCRIPTION, desc);
            putValue(MNEMONIC_KEY, mnemonic);
        }

        public void actionPerformed(ActionEvent e) {
            copyData((Component)e.getSource());
        }
    }
}
<h3><a name="jnlp"></a>propertyprobe.jnlp</h3>
<?xml version='1.0' encoding='UTF-8' ?>
<jnlp spec='1.0'
    href='propertyprobe.jnlp'>
    <information>
        <title>Property Probe</title>
        <vendor>PSCode.org - Andrew Thompson</vendor>
        <description kind='one-line'>
            Table for common Java properties.
        </description>
        <shortcut online='false'>
            <desktop/>
        </shortcut>
    </information>
    <resources>
        <j2se version='1.2+' />
        <jar href='propprobe.jar' main='true' />
    </resources>
    <applet-desc
        main-class='org.pscode.tool.property.PropertyProbe' 
        name='applet'
        width='600'
        height='300' >
        <param name='jnlp.launched' value='true' />
    </applet-desc>
</jnlp>
<h3><a name="html"></a>js.html</h3>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<title>
Property Probe - applet
</title>
<script type='text/javascript' src="http://www.java.com/js/deployJava.js"></script>
<script type='text/javascript' src='http://pscode.org/file/urlcode.js'></script>
<script type='text/javascript' src='http://pscode.org/file/queryprm.js'></script>
<script type='text/javascript' src='http://pscode.org/file/urlquery.js'></script>

<script type='text/javascript' src='http://pscode.org/file/appletparams.js'></script>

<script type='text/javascript'>
archiveName = "";
if (true) {
    archiveName = 'propprobe.jar';
} else {
    archiveName = 'propprobe-trusted.jar';
}


var attributes = {
    code:'org.pscode.tool.property.PropertyProbe',
    codebase:'../lib',
    archive:archiveName,
    width:'600',
    height:'400'
};

var version = '1.2';

var params;

params.jnlp_href='../lib/propertyprobe.jnlp';
</script>
</HEAD>
<BODY>

<H1>Property Probe</H1>

<script type='text/javascript'>
deployJava.runApplet( attributes, params, version );
</script>

<P>.. (text & instructions)
</BODY>
</HTML>
<h3><a name="scripts"></a>JavaScripts linked in the HTML</h3>
'Sold separately' - pull them by direct fetch into your browser window, if you're that interested.
---------------------------------
<h2><a name="revisions"></a>Post Revisions</h2>

Edited by: Andrew Thompson on Mar 26, 2011 5:32 AM
Changed subject.

Edited by: Andrew Thompson on Mar 26, 2011 5:19 PM
Added accumulated results and index, other tweaks.

Edited by: Andrew Thompson on Mar 31, 2011 11:08 AM
Removed 'how output appears in code tags'. Added latest results, 'grab focus' results. Changed URL to invoke 'grab focus'.

Edited by: Andrew Thompson on Apr 2, 2011 4:20 AM
Added 1st result from SO - on Linux system.

Edited by: Andrew Thompson on Apr 2, 2011 6:15 AM
Added latest result.
  • 1. Re: Copy in sand-boxed app. in 1.6.0_24+
    800268 Expert
    Currently Being Moderated
    CTRL-C gives me a warning whether to allow write-only clipboard access:
    java.version     1.6.0_20     
    java.vendor     Sun Microsystems Inc.     
    os.name     Windows 7     
    os.version     6.1     

    Same with pressing the copy button.

    The security popup really messes with the focus in Firefox (3.6.16) though. I need to minimize/maximize it to be able to focus any text fields/area in the browser (url bar/search bar/this response post). Somehow the search one works.
  • 2. Re: Copy in sand-boxed app. in 1.6.0_24+
    793415 Pro
    Currently Being Moderated
    Walter Laan wrote:
    CTRL-C gives me a warning whether to allow write-only clipboard access:
    java.version     1.6.0_20     
    java.vendor     Sun Microsystems Inc.     
    os.name     Windows 7     
    os.version     6.1     

    Same with pressing the copy button.
    Thanks Walter. Not surprised to see your helpful & proactive self pop into this thread.
    The security popup really messes with the focus in Firefox (3.6.16) though. ..
    That is unfortunate.
    ..I need to minimize/maximize it to be able to focus any text fields/area in the browser (url bar/search bar/this response post). Somehow the search one works.
    Huh.. I wonder if calling setFocus() on the component that had it before the copy (e.g. the button or table, in this case) would help? I note that the JavaDocs recommend using requestFocusInWindow(), but I guess that would not be effective in this case. I'll give it some thought, and notify the thread if I change the code.
  • 3. Re: Copy in sand-boxed app. in 1.6.0_24+
    804091 Explorer
    Currently Being Moderated
    I can copy, and I get a warning each time with Ctrl-C and clicking the button.
    java.version     1.6.0_24     
    java.vendor     Sun Microsystems Inc.     
    os.name     Windows 7     
    os.version     6.1     
    ----
    Walter Laan wrote:
    The security popup really messes with the focus in Firefox (3.6.16) though.
    Not saying you're wrong, but I'm using FireFox 3.6.16, as well, and I have none of the focus troubles you've described.
  • 4. Re: Copy in sand-boxed app. in 1.6.0_24+
    800268 Expert
    Currently Being Moderated
    almightywiz wrote:
    Walter Laan wrote:
    The security popup really messes with the focus in Firefox (3.6.16) though.
    Not saying you're wrong, but I'm using FireFox 3.6.16, as well, and I have none of the focus troubles you've described.
    Cannot reproduce it now either. Weird.
  • 5. Re: Copy in sand-boxed app. in 1.6.0_24+
    captfoss Pro
    Currently Being Moderated
    Walter Laan wrote:
    Cannot reproduce it now either. Weird.
    I find it hard to remained focused around 2 in the afternoon as well. Perhaps a cup of afternoon tea would help clear up your focus issues?
  • 6. Re: Copy in sand-boxed app. in 1.6.0_24+
    793415 Pro
    Currently Being Moderated
    Walter Laan wrote:
    almightywiz wrote:
    Walter Laan wrote:
    The security popup really messes with the focus in Firefox (3.6.16) though.
    Not saying you're wrong, but I'm using FireFox 3.6.16, as well, and I have none of the focus troubles you've described.
    Cannot reproduce it now either. Weird.
    I got the impression you were referring to keyboard focus, so I did some further tests on focus behavior. The test results are listed in the Accumulated Results table on the 1st post.

    The only browser so far that works as I'd expect, or at least as I'd like, is IE.

    Applets and keyboard navigation have always been a PITA. Some time ago I vaguely recall seeing an update involving a new parameter to regulate initial focus (applet or page, ..or another applet), but for the life of me I cannot locate it now. Given that it was a parameter for initial focus, I doubt it would help in this case.

    Edited by: Andrew Thompson on Mar 26, 2011 6:18 PM
    Removed table which has now been expanded & added to 1st post.
  • 7. Re: Copy in sand-boxed app. in 1.6.0_24+
    800268 Expert
    Currently Being Moderated
    What I meant was that even clicking with the mouse in the control would not give them focus (like when you have a GlassPane up in a Swing program). I checked with keyboard and I'm also not able to get anything focused (except alt to open the browser application menus).

    I can reproduce the focus-not-even-with-mouse-click with an cold start of the applet (browser closed and re-opened, shows a black square for a second before applet shows). After reloading the page it works correctly with the mouse.
  • 8. Re: Copy in sand-boxed app. in 1.6.0_24+
    camickr Expert
    Currently Being Moderated
    Works fine for me:

    java.version     1.6.0_07
    java.vendor     Sun Microsystems Inc.
    os.name     Windows XP
    os.version     5.1

    I guess I have an older plug in. I use IE 8. No popups or no beeps, it just copies to the clipboard.
  • 9. Re: Copy in sand-boxed app. in 1.6.0_24+
    DarrylBurke Guru Moderator
    Currently Being Moderated
    I cannot see how to get the version in Chrome.
    Click the spanner icon on the top right -> About Google Chrome

    Mine is 10.0.648.204

    db
  • 10. Re: Copy in sand-boxed app. in 1.6.0_24+
    793415 Pro
    Currently Being Moderated
    camickr wrote:
    ..No popups or no beeps, it just copies to the clipboard.
    Thanks for the info. I've added it to the Accumulated Results.

    It is fortunate that there is no beep in the absence of the pop-up. Imagine a malicious coder creating an applet that copies to clipboard every 20 MS. If it made a sound, it would end up sounding like a fire truck! Though having a dialog pop up at the same delay would also be irritating.
  • 11. Re: Copy in sand-boxed app. in 1.6.0_24+
    793415 Pro
    Currently Being Moderated
    Darryl Burke wrote:
    I cannot see how to get the version in Chrome.
    Click the spanner icon on the top right -> About Google Chrome
    Thanks for the tip. Added the version to the accumulated results table on first post.
    Mine is 10.0.648.204
    Did you have time to give the applet a try? Any results different from what is already reported?
  • 12. Re: Copy in sand-boxed app. in 1.6.0_24+
    846470 Newbie
    Currently Being Moderated
    Hi Andrew,

    your applet worked fine for me with both using button or pressing ctrl-c, initially giving me the security warning.
    No problems with focus. I was using Firefox 3.6.15

    java.version     1.6.0_24     
    java.vendor     Sun Microsystems Inc.     
    os.name     Windows XP     
    os.version     5.1     

    I will test it for my application.

    Many thanks and greetings
    Christian
  • 13. Re: Copy in sand-boxed app. in 1.6.0_24+
    800268 Expert
    Currently Being Moderated
    From work, copy ok after security dialog.
    java.version     1.7.0-ea     
    java.vendor     Oracle Corporation     
    os.name     Windows XP     
    os.version     5.1     

    No weird focus issue here (except for the no focus in Applet after security dialog). No Sunshine though :p
  • 14. Re: Copy in sand-boxed app. in 1.6.0_24+
    abillconsl Explorer
    Currently Being Moderated
    Andrew, thanks for posting this - appreciate your hard work!

    Now here's how it went for me:

    FF 3.6.13 (and FF is bugging me to upgrade ... i - i - i - i - i rolleyes)

    click link over to applet:
    - Clicked on a cell
    - CNTL-C
    - get security pop-up as expected. Clicked the checkbox and the ok button:
    - Pasted to Notepad - pasted all of it (with or without CNTL-A)
    - copied from Notepad just one of the four lines and pasted that one line back into Notepad (this to clear the clipboard)
    - Back to applet, and CNTL-C again.
    - Pasted all four lines into Notepad
    - JButton can not be tabbed to, but is activated via ALT-C when the applet is in focus and it works the same as CNTL-C - gets all the cells ... here they are:
    java.version     1.6.0_12     
    java.vendor     Sun Microsystems Inc.     
    os.name     Windows XP     
    os.version     5.1     
    - So the CNTL-A does not seem to do anything.

    NOTE: I have not yet looked at your code.

    ~Bill
1 2 Previous Next

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points