⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swingshellconsole.java

📁 有关java 的p2p应用,是一般很好的教程,有兴趣的朋友应该好好阅读一下
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* *  Copyright (c) 2001 Sun Microsystems, Inc.  All rights reserved. * *  Redistribution and use in source and binary forms, with or without *  modification, are permitted provided that the following conditions *  are met: * *  1. Redistributions of source code must retain the above copyright *  notice, this list of conditions and the following disclaimer. * *  2. Redistributions in binary form must reproduce the above copyright *  notice, this list of conditions and the following disclaimer in *  the documentation and/or other materials provided with the *  distribution. * *  3. The end-user documentation included with the redistribution, *  if any, must include the following acknowledgment: *  "This product includes software developed by the *  Sun Microsystems, Inc. for Project JXTA." *  Alternately, this acknowledgment may appear in the software itself, *  if and wherever such third-party acknowledgments normally appear. * *  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must *  not be used to endorse or promote products derived from this *  software without prior written permission. For written *  permission, please contact Project JXTA at http://www.jxta.org. * *  5. Products derived from this software may not be called "JXTA", *  nor may "JXTA" appear in their name, without prior written *  permission of Sun. * *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *  DISCLAIMED.  IN NO EVENT SHALL SUN MICROSYSTEMS OR *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *  SUCH DAMAGE. *  ==================================================================== * *  This software consists of voluntary contributions made by many *  individuals on behalf of Project JXTA.  For more *  information on Project JXTA, please see *  <http://www.jxta.org/>. * *  This license is based on the BSD license adopted by the Apache Foundation. * *  $Id: SwingShellConsole.java,v 1.8 2006/06/14 16:37:12 bondolo Exp $ */package net.jxta.impl.shell;import java.awt.Font;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.event.InputEvent;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.util.ArrayList;import java.util.Collections;import java.util.List;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JViewport;import java.awt.HeadlessException;import java.awt.datatransfer.UnsupportedFlavorException;import java.io.IOException;import java.io.InterruptedIOException;import javax.swing.text.BadLocationException;import java.util.logging.Level;import java.util.logging.Logger;import net.jxta.credential.Credential;import net.jxta.membership.MembershipService;import net.jxta.peergroup.PeerGroup;import net.jxta.rendezvous.RendezVousService;import net.jxta.rendezvous.RendezvousEvent;import net.jxta.rendezvous.RendezvousListener;import net.jxta.exception.PeerGroupException;import net.jxta.impl.rendezvous.RendezVousServiceInterface;import net.jxta.impl.rendezvous.rpv.PeerView;import net.jxta.impl.rendezvous.rpv.PeerViewEvent;import net.jxta.impl.rendezvous.rpv.PeerViewListener;import net.jxta.impl.shell.bin.Shell.Shell;/** *  A Swing based container for JXTA Shell sessions. **/public class SwingShellConsole extends ShellConsole {        /**     *  Log4J Logger     **/    private static final java.util.logging.Logger LOG = java.util.logging.Logger.getLogger(SwingShellConsole.class.getName());;        /**     *  The number of consoles opened     **/    private static int consoleCount = 0;        /**     *  Lines of console input awaiting shell processing.     **/    private List lines = new ArrayList();        /**     *  The panel in which our stuff lives.     **/    private JPanel panel;   	    /**     * Is this console embedded in another application? If yes,     * the Shell must ignore exit commands.     */    private boolean embedded = false;        /**     *  The frame that holds the TextArea object making up the terminal. If we     *  are running in a panel provided by someone else then this will not be     *  initialized.     **/    private JFrame frame = null;        /**     *  The TextArea object that displays the status     **/    private JLabel statusStart = null;        /**     *  The TextArea object that displays the status     **/    private JLabel statusEnd = null;        /**     *  The TextArea object that displays the data     **/    private JTextArea text = null;        /**     *  The length of the static text displayed, excludes the prompt and the     *   current input line.     **/    private int textLength = 0;        /**     *  Length of the prompt.     **/    private int promptLength = 0;        /**     *  Length of the current input line.     **/    private int lineLength = 0;        /**     *  Location of the insertion point within the current input line     **/    private int lineInsert = 0;        /**     *  Keeps bits for the status line.     **/    private StatusKeeper statusKeeper = null;        /**     *  Creates a new terminal window with rows row and cols columns to display.     *     * @param  consoleName  the name of the console     * @param rootApp   The root shell application for this console instance.     * @param  rows     the number of rows displayed     * @param  cols     the number of columns displayed     **/    public SwingShellConsole( ShellApp rootApp, String consoleName, int rows, int cols) {        this( null, rootApp, consoleName, rows, cols);    }        /**     *  Creates a new terminal window with rows row and cols columns to display.     *     * @param  inPanel  The panel in which the shell console will live.     * @param rootApp   The root shell application for this console instance.     * @param  consoleName  the name of the console     * @param  rows     the number of rows displayed     * @param  cols     the number of columns displayed     **/    public SwingShellConsole(JPanel inPanel, ShellApp rootApp, String consoleName, int rows, int cols) {        super( rootApp, consoleName );                String consoleFullName;        synchronized ( this.getClass() ) {            consoleFullName = consoleName + " - " + (++consoleCount);        }                try {            if (null == inPanel) {                panel = new JPanel(new GridBagLayout());                // create a frame for it to live in.                frame = new JFrame(consoleFullName);                frame.getContentPane().add(panel);                frame.addWindowListener(new WindowAdapter() {                                            /**                                             * {@inheritDoc}                                             */                                            public void windowClosing(WindowEvent e) {                                                ShellApp sa = getShellApp();                                                if (null != sa) {                                                    sa.stopApp();                                                }                                            }                                            /**                                             * {@inheritDoc}                                             */                                            public void windowGainedFocus(WindowEvent e) {                                                text.getCaret().setVisible(true);                                            }                                            /**                                             * {@inheritDoc}                                             */                                            public void windowLostFocus(WindowEvent e) {                                                text.getCaret().setVisible(false);                                            }                                        });            }            else {                panel = inPanel;                panel.setLayout(new GridBagLayout());                embedded = true;            }        }        catch (InternalError error) {            // this will occur is AWT is not available or can't be initialized (most            // commonly on unix machines in a terminal window).            if (LOG.isLoggable(java.util.logging.Level.SEVERE)) {                LOG.finer("Could not initialize AWT, using TTY Console mode");            }            HeadlessException horseman = new HeadlessException("InternalError");            horseman.initCause(error);            throw horseman;        }                // Shell embedded in another application         if( null == System.getProperty(Shell.JXTA_SHELL_EMBEDDED_KEY)) {            try {                System.setProperty(Shell.JXTA_SHELL_EMBEDDED_KEY, Boolean.toString(embedded));            } catch( SecurityException couldntSet ) {                ;            }        }        int fontsize = 12;        String fontname = System.getProperty("SHELLFONTNAME", "Lucida Sans Typewriter");        String fontsizeProp = System.getProperty("SHELLFONTSIZE");        if (fontsizeProp != null) {            try {                fontsize = Integer.valueOf(fontsizeProp).intValue();            } catch (NumberFormatException e) {                // will use default size                ;            }        }                this.statusStart = new JLabel( " ", JLabel.LEADING);        statusStart.setFont(new Font(fontname, Font.PLAIN, fontsize));                GridBagConstraints constr = new GridBagConstraints();                constr.gridwidth = 1; constr.gridheight = 1;        constr.gridx = 0; constr.gridy = 0;        constr.weightx = 1; constr.weighty = 0;        constr.anchor = GridBagConstraints.FIRST_LINE_START;        constr.fill = GridBagConstraints.HORIZONTAL;                panel.add( statusStart, constr );                this.statusEnd = new JLabel( " ", JLabel.TRAILING );        statusEnd.setFont(new Font(fontname, Font.PLAIN, fontsize));                constr.gridwidth = 1; constr.gridheight = 1;        constr.gridx = 1; constr.gridy = 0;        constr.weightx = 1; constr.weighty = 0;        constr.anchor = GridBagConstraints.FIRST_LINE_END;        constr.fill = GridBagConstraints.HORIZONTAL;                panel.add( statusEnd, constr );                this.text = new JTextArea();        text.setRows(rows);        text.setColumns(cols);        text.setFont(new Font(fontname, Font.PLAIN, fontsize));        text.setEditable(false);        text.addKeyListener( new SwingShellConsole.keyHandler() );        text.setWrapStyleWord(true);        text.setLineWrap(true);        text.getCaret().setVisible(true);                JScrollPane stsp = new JScrollPane();        stsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);        stsp.getViewport().add(text);        stsp.getViewport().setScrollMode(JViewport.BLIT_SCROLL_MODE);                constr.gridwidth = 2; constr.gridheight = 1;        constr.gridx = 0; constr.gridy = 1;        constr.weightx = 1; constr.weighty = 1;        constr.anchor = GridBagConstraints.LAST_LINE_END;        constr.fill = GridBagConstraints.BOTH;                panel.add( stsp, constr );                if( null != frame ) {            // Offset the frames            frame.setLocation( (fontsize * 4), (fontsize * 4) );            frame.pack();            frame.setVisible(true);        }                text.requestFocus();    }        /**

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -