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

📄 swingchatclient.java

📁 本程序实现简单聊天
💻 JAVA
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one *  or more contributor license agreements.  See the NOTICE file *  distributed with this work for additional information *  regarding copyright ownership.  The ASF licenses this file *  to you under the Apache License, Version 2.0 (the *  "License"); you may not use this file except in compliance *  with the License.  You may obtain a copy of the License at *   *    http://www.apache.org/licenses/LICENSE-2.0 *   *  Unless required by applicable law or agreed to in writing, *  software distributed under the License is distributed on an *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *  KIND, either express or implied.  See the License for the *  specific language governing permissions and limitations *  under the License.  *   */package org.apache.mina.example.chat.client;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.net.InetSocketAddress;import java.net.SocketAddress;import javax.swing.AbstractAction;import javax.swing.BorderFactory;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollBar;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.border.EmptyBorder;import org.apache.mina.example.chat.client.SwingChatClientHandler.Callback;import org.apache.mina.transport.socket.nio.SocketConnector;/** * Simple chat client based on Swing & MINA that implements the chat protocol. *   * @author The Apache Directory Project (mina-dev@directory.apache.org) * @version $Rev$, $Date$ */public class SwingChatClient extends JFrame implements Callback{    private static final long serialVersionUID = 1538675161745436968L;    private JTextField inputText;    private JButton loginButton;    private JButton quitButton;    private JButton closeButton;    private JTextField serverField;    private JTextField nameField;    private JTextArea area;    private JScrollBar scroll;    private ChatClientSupport client;    private SwingChatClientHandler handler;    private SocketConnector connector;    public SwingChatClient()    {        super( "Chat Client based on Apache MINA" );        connector = new SocketConnector();        loginButton = new JButton( new LoginAction() );        loginButton.setText( "Connect" );        quitButton = new JButton( new LogoutAction() );        quitButton.setText( "Disconnect" );        closeButton = new JButton( new QuitAction() );        closeButton.setText( "Quit" );        inputText = new JTextField( 30 );        inputText.setAction( new BroadcastAction() );        area = new JTextArea( 10, 50 );        area.setLineWrap( true );        area.setEditable( false );        scroll = new JScrollBar();        scroll.add( area );        nameField = new JTextField( 10 );        nameField.setEditable( false );        serverField = new JTextField( 10 );        serverField.setEditable( false );        JPanel h = new JPanel();        h.setLayout( new BoxLayout( h, BoxLayout.LINE_AXIS ) );        h.setBorder( BorderFactory.createEmptyBorder( 10, 10, 10, 10 ) );        JLabel nameLabel = new JLabel( "Name: " );        JLabel serverLabel = new JLabel( "Server: " );        h.add( nameLabel );        h.add( Box.createRigidArea( new Dimension( 10, 0 ) ) );        h.add( nameField );        h.add( Box.createRigidArea( new Dimension( 10, 0 ) ) );        h.add( Box.createHorizontalGlue() );        h.add( Box.createRigidArea( new Dimension( 10, 0 ) ) );        h.add( serverLabel );        h.add( Box.createRigidArea( new Dimension( 10, 0 ) ) );        h.add( serverField );        JPanel p = new JPanel();        p.setLayout( new BoxLayout( p, BoxLayout.LINE_AXIS ) );        p.setBorder( new EmptyBorder( 10, 10, 10, 10 ) );        JPanel left = new JPanel();        left.setLayout( new BoxLayout( left, BoxLayout.PAGE_AXIS ) );        left.add( area );        left.add( Box.createRigidArea( new Dimension( 0, 5 ) ) );        left.add( Box.createHorizontalGlue() );        left.add( inputText );        JPanel right = new JPanel();        right.setLayout( new BoxLayout( right, BoxLayout.PAGE_AXIS ) );        right.add( loginButton );        right.add( Box.createRigidArea( new Dimension( 0, 5 ) ) );        right.add( quitButton );        right.add( Box.createHorizontalGlue() );        right.add( Box.createRigidArea( new Dimension( 0, 25 ) ) );        right.add( closeButton );        p.add( left );        p.add( Box.createRigidArea( new Dimension( 10, 0 ) ) );        p.add( right );        getContentPane().add( h, BorderLayout.NORTH );        getContentPane().add( p );        closeButton.addActionListener( new ActionListener()        {            public void actionPerformed( ActionEvent e )            {                dispose();            }        } );        setLoggedOut();        setDefaultCloseOperation( EXIT_ON_CLOSE );    }    public class LoginAction extends AbstractAction    {        private static final long serialVersionUID = 3596719854773863244L;        public void actionPerformed( ActionEvent e )        {            ConnectDialog dialog = new ConnectDialog( SwingChatClient.this );            dialog.pack();            dialog.setVisible( true );            if( dialog.isCancelled() )            {                return;            }            SocketAddress address = parseSocketAddress( dialog                    .getServerAddress() );            String name = dialog.getUsername();            handler = new SwingChatClientHandler( SwingChatClient.this );            client = new ChatClientSupport( name, handler );            nameField.setText( name );            serverField.setText( dialog.getServerAddress() );            if( !client.connect( connector, address, dialog.isUseSsl() ) )            {                JOptionPane.showMessageDialog( SwingChatClient.this,                        "Could not connect to " + dialog.getServerAddress()                                + ". " );            }        }    }    private class LogoutAction extends AbstractAction    {        private static final long serialVersionUID = 1655297424639924560L;        public void actionPerformed( ActionEvent e )        {            try            {                client.quit();                setLoggedOut();            }            catch( Exception e1 )            {                JOptionPane.showMessageDialog( SwingChatClient.this,                        "Session could not be closed." );            }        }    }    private class BroadcastAction extends AbstractAction    {        /**         *          */        private static final long serialVersionUID = -6276019615521905411L;        public void actionPerformed( ActionEvent e )        {            client.broadcast( inputText.getText() );            inputText.setText( "" );        }    }    private class QuitAction extends AbstractAction    {        private static final long serialVersionUID = -6389802816912005370L;        public void actionPerformed( ActionEvent e )        {            if( client != null )            {                client.quit();            }            SwingChatClient.this.dispose();        }    }    private void setLoggedOut()    {        inputText.setEnabled( false );        quitButton.setEnabled( false );        loginButton.setEnabled( true );    }    private void setLoggedIn()    {        area.setText( "" );        inputText.setEnabled( true );        quitButton.setEnabled( true );        loginButton.setEnabled( false );    }    private void append( String text )    {        area.append( text );    }    private void notifyError( String message )    {        JOptionPane.showMessageDialog( this, message );    }    private SocketAddress parseSocketAddress( String s )    {        s = s.trim();        int colonIndex = s.indexOf( ":" );        if( colonIndex > 0 )        {            String host = s.substring( 0, colonIndex );            int port = parsePort( s.substring( colonIndex + 1 ) );            return new InetSocketAddress( host, port );        }        else        {            int port = parsePort( s.substring( colonIndex + 1 ) );            return new InetSocketAddress( port );        }    }    private int parsePort( String s )    {        try        {            return Integer.parseInt( s );        }        catch( NumberFormatException nfe )        {            throw new IllegalArgumentException( "Illegal port number: " + s );        }    }    public void connected()    {        client.login();    }    public void disconnected()    {        append( "Connection closed.\n" );        setLoggedOut();    }    public void error( String message )    {        notifyError( message + "\n" );    }    public void loggedIn()    {        setLoggedIn();        append( "You have joined the chat session.\n" );    }    public void loggedOut()    {        append( "You have left the chat session.\n" );        setLoggedOut();    }    public void messageReceived( String message )    {        append( message + "\n" );    }    public static void main( String[] args )    {        SwingChatClient client = new SwingChatClient();        client.pack();        client.setVisible( true );    }}

⌨️ 快捷键说明

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