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

📄 simpletalk.java

📁 一个小的聊天程序
💻 JAVA
字号:
package talk.npt;

//: c13:SimpleTalk.java
// SimpleTalk.
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.basic.*;
import java.awt.*;
import java.awt.event.*;

public class SimpleTalk extends JFrame {

    Container cp;
    JPanel leftPanel = new JPanel();
    JPanel rightPanel = new JPanel();
    JSplitPane mainPanel = new JSplitPane();
    JTextArea outputArea = new JTextArea(8,30);
    JTextArea inputArea = new JTextArea(4,30);
    JButton sendButton = new JButton("Send");
    JButton setNameButton = new JButton("Set");
    JLabel ipLabel = new JLabel("IP/Hostname:");
    JTextField ipInputField = new JTextField(12);
    JLabel nameLabel = new JLabel("Name:");
    JTextField nameInputField = new JTextField(12);
    JPanel namePanel = new JPanel();
    JPanel ipPanel = new  JPanel();
    JButton connButton = new JButton("Connect");
    boolean isServer = true ;
    
    Server server;
    Client client;
        
    public SimpleTalk (String title){
        super(title);
        cp = getContentPane();
        
        //set left panel 
        leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
        inputArea.setFont(new Font(null, 0, 14));
        outputArea.setFont(new Font(null, 0, 14));
        inputArea.setBorder(new LineBorder(Color.blue));
        outputArea.setBorder(new LineBorder(Color.blue));
        outputArea.setEditable(false);
        outputArea.setLineWrap(true);
        inputArea.setLineWrap(true);
        leftPanel.add(new JScrollPane(outputArea));        
        //leftPanel.add(outputArea);
        leftPanel.add(new JLabel(" "));
        leftPanel.add(new JScrollPane(inputArea));
        //leftPanel.add(inputArea);
        leftPanel.add(sendButton);
        Box bv = Box.createVerticalBox();
        bv.add(Box.createVerticalStrut(2));
        bv.add(leftPanel);
        bv.add(Box.createVerticalStrut(2));
        Box bh = Box.createHorizontalBox();
        bh.add(Box.createHorizontalStrut(5));
        bh.add(bv);
        //bh.add(Box.createHorizontalStrut(10));
        
        /*
        Border border = BasicBorders.getInternalFrameBorder();
        Insets inset = border.getBorderInsets(leftPanel) ;
        inset.top = 30;
        inset.bottom = 30;
        inset.left = 40;
        inset.right = 40;
        leftPanel.setBorder(border);
        */
        
        //set right panel
        ipPanel.add(ipLabel);
        ipPanel.add(ipInputField);
        ipPanel.add(connButton);
        namePanel.add(nameLabel);
        namePanel.add(nameInputField);
        namePanel.add(setNameButton);
        rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
        rightPanel.add(ipPanel);
        rightPanel.add(namePanel);
        //rightPanel.add(serverButton);
        //rightPanel.add(connButton);
        
        //set main pane
        mainPanel.setRightComponent(rightPanel);
        mainPanel.setLeftComponent(bh);
        mainPanel.setDividerLocation(320);
	cp.add(mainPanel);

	//serverButton.addActionListener(new ServerButtonListener());
	connButton.addActionListener(new ConnectButtonListener());
	sendButton.addActionListener(new SendButtonListener());
	setNameButton.addActionListener(new SetNameButtonListener());
	
	
	server = new Server(new OutputActionListener());
	server.addActionListener(new SetupConnListener());
    }
    
    class SetupConnListener implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
            connButton.setEnabled(false);
            outputArea.append("Connection setup.\n");
            outputArea.setCaretPosition(outputArea.getDocument().getLength());
        }
    }
    
    class OutputActionListener implements ActionListener {
        String str;
    	public void setInputMsg(String str){
    	    this.str = str;
    	}
    	public void actionPerformed(ActionEvent e) {
            outputArea.append(" " + str );
            outputArea.setCaretPosition(outputArea.getDocument().getLength());
        }
    }
    
    //as a client, connect to a server
    class ConnectButtonListener implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    	    try {
    	        String ipAddress = ipInputField.getText();
                client = new Client(ipAddress, 8088, new OutputActionListener());
                client.connect();
                connButton.setEnabled(false);
                outputArea.append("Connection setup.\n");
                isServer = false;
                server.closeServer();
            } catch(Exception ioe){
            	ioe.printStackTrace();
            }
        }
    }
    
    //set name
    class SetNameButtonListener implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
	    if(isServer){
    	        server.setName(nameInputField.getText());
            } else {
                client.setName(nameInputField.getText());
            }
        }
    }
    
    //send Messages
    class SendButtonListener implements ActionListener {
    	public void actionPerformed(ActionEvent e){
    		String msg = inputArea.getText();
        	if(msg != null) {
        	    outputArea.append(" me: " + msg + "\n");
        	    if(isServer){
        	    	server.sendMessage(msg);
        	    } else {
        	        client.sendMessage(msg);
        	    }
        	}
        	inputArea.setText("");

        }
    }

    public void closeConnection(){
    	try{
            if(isServer){
        	server.closeServer();
            } else {
                client.closeConnection();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {

        try {
            UIManager.setLookAndFeel(UIManager.
            getSystemLookAndFeelClassName());
        } catch(Exception e) {
            e.printStackTrace(System.err);
        }
        // Note the look & feel must be set before
        // any components are created.
        final SimpleTalk talk = new SimpleTalk("SimpleTalk");
        talk.addWindowListener(new WindowAdapter() {
	    public void windowClosing(WindowEvent e) {
	    talk.closeConnection();
	    System.exit(0);
	  }
	});
	talk.setSize(500, 400);
	talk.setVisible(true);
    }
}	

⌨️ 快捷键说明

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