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

📄 cmdconsole.java

📁 一个用java编写的服务器,对于学习网络编程的人来说是个很好的例子
💻 JAVA
字号:
/*
 * This file is part of the QuickServer library 
 * Copyright (C) 2003-2005 QuickServer.org
 *
 * Use, modification, copying and distribution of this software is subject to
 * the terms and conditions of the GNU Lesser General Public License. 
 * You should have received a copy of the GNU LGP License along with this 
 * library; if not, you can download a copy from <http://www.quickserver.org/>.
 *
 * For questions, suggestions, bug-reports, enhancement-requests etc.
 * visit http://www.quickserver.org
 *
 */

package org.quickserver.net.qsadmin.gui;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.io.*;

/**
 * Command Console
 * @author Akshathkumar Shetty
 */
public class CmdConsole extends JPanel {
	private static final String NEW_LINE = "\r\n";
	private QSAdminMain qsadminMain;

	private JPanel centerPanel;
	private JPanel textPanel;
	private JPanel sendPanel;
	private JPanel buttonPanel;

	private JLabel convLabel = new JLabel("Conversation with host");
	private Border connectedBorder = BorderFactory.createTitledBorder(
		new EtchedBorder(), "Connected To < NONE >");
	private JTextArea messagesField = new JTextArea();
	
	private JLabel sendLabel = new JLabel("Message");
	private JTextField sendField = new JTextField();
	
	private JButton sendButton = new JButton("Send");
	private JButton saveButton = new JButton("Save");
	private JButton clearButton = new JButton("Clear");
	
	private GridBagConstraints gbc = new GridBagConstraints();

	public CmdConsole(QSAdminMain qsadminMain) {
		Container cp = this;
		this.qsadminMain = qsadminMain;

		textPanel = new JPanel();
		textPanel.setLayout(new BorderLayout(0,5));
		textPanel.add(convLabel,BorderLayout.NORTH);
		messagesField.setEditable(false);
		messagesField.setBackground(Color.BLACK);
		messagesField.setForeground(Color.GREEN);
		JScrollPane jsp = new JScrollPane(messagesField);
		textPanel.add(jsp);
		textPanel.setBorder(BorderFactory.createEmptyBorder(3,3,0,3));

		sendPanel = new JPanel();
		sendPanel.setLayout(new GridBagLayout());
		gbc.weighty = 0.0;
		gbc.weightx = 0.0;
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridheight = 1;
		gbc.gridwidth = 1;
		gbc.anchor = GridBagConstraints.EAST;
		gbc.fill = GridBagConstraints.NONE;
		sendPanel.add(sendLabel, gbc);
		gbc.gridx = 1;
		gbc.weightx = 1.0;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		sendField.setEditable(false);
		sendPanel.add(sendField, gbc);
		gbc.gridx = 2;
		gbc.weightx = 0.0;
		gbc.fill = GridBagConstraints.NONE;
		sendButton.setEnabled(false);
		sendButton.setToolTipText("Send text to host");
		ActionListener sendListener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String msg = sendField.getText();
				if(!msg.equals(""))
					sendMessage(msg);
				else {
					int value = JOptionPane.showConfirmDialog(
						CmdConsole.this,  "Send Blank Line ?",
						"Send Data To Server",
						JOptionPane.YES_NO_OPTION);
					if (value == JOptionPane.YES_OPTION)
						sendMessage(msg);
				}
			}
		};
		sendButton.addActionListener(sendListener);
		sendField.addActionListener(sendListener);
		sendPanel.add(sendButton, gbc);
		sendPanel.setBorder(
			new CompoundBorder(
				BorderFactory.createEmptyBorder(0,0,0,3),
				BorderFactory.createTitledBorder("Send")));

		buttonPanel = new JPanel();
		buttonPanel.setLayout(new GridBagLayout());
		gbc.weighty = 0.0;
		gbc.weightx = 1.0;
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridheight = 2;
		gbc.gridwidth = 1;
		gbc.anchor = GridBagConstraints.EAST;
		gbc.fill = GridBagConstraints.BOTH;
		buttonPanel.add(sendPanel, gbc);
		gbc.weighty = 0.0;
		gbc.weightx = 0.0;
		gbc.gridx = 1;
		gbc.gridheight = 1;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		saveButton.setToolTipText("Save conversation with host to a file");
		saveButton.setMnemonic('S');
		ActionListener saveListener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String text = messagesField.getText();
				if(text.equals("")) {
					error("Nothing to save","Save to file");
					return;
				}
				String fileName="";
				JFileChooser chooser = new JFileChooser();
				chooser.setCurrentDirectory(new File("."));
				int returnVal = chooser.showSaveDialog(CmdConsole.this);
				if(returnVal == JFileChooser.APPROVE_OPTION) {
				   fileName=chooser.getSelectedFile().getAbsolutePath();
				   try {
						writeFile(fileName,text);	
				   }
				   catch (Exception ioe) {
					   JOptionPane.showMessageDialog(CmdConsole.this,
						   ""+ioe.getMessage(),
						   "Error saving to file..",
						   JOptionPane.ERROR_MESSAGE);
				   }				   
				}				
			}
		};
		saveButton.addActionListener(saveListener);
		buttonPanel.add(saveButton, gbc);
		gbc.gridy = 1;
		clearButton.setToolTipText("Clear conversation with host");
		clearButton.setMnemonic('C');
		ActionListener clearListener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				messagesField.setText("");
			}
		};
		clearButton.addActionListener(clearListener);
		buttonPanel.add(clearButton, gbc);
		buttonPanel.setBorder(BorderFactory.createEmptyBorder(3,0,0,3));

		centerPanel = new JPanel();
		centerPanel.setLayout(new BorderLayout(0,0));
		centerPanel.add(buttonPanel,BorderLayout.SOUTH);
		centerPanel.add(textPanel,BorderLayout.CENTER);

		CompoundBorder cb=new CompoundBorder(
			BorderFactory.createEmptyBorder(5,10,10,10),
			connectedBorder);
		centerPanel.setBorder(cb);

		cp.setLayout(new BorderLayout());
		cp.add(centerPanel,BorderLayout.CENTER);
	}

	public void append(String msg) {
		setSendEdit(qsadminMain.isConnected());
		messagesField.append(msg+NEW_LINE);
		messagesField.setCaretPosition(messagesField.getText().length());
	}

	public void sendMessage(String s) {
		setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
		try	{
			qsadminMain.sendCommand(s, true);
			sendField.setText("");
			setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
		} catch (Exception e) {
			setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
			JOptionPane.showMessageDialog(CmdConsole.this,
				e.getMessage(),"Error Sending Message", 
				JOptionPane.ERROR_MESSAGE);
		}
	}

	private void changeBorder(String ip) {
		if(ip==null || ip.equals(""))
			connectedBorder = BorderFactory.createTitledBorder(
				new EtchedBorder(), "Connected To < NONE >");
		else
			connectedBorder = BorderFactory.createTitledBorder(
				new EtchedBorder(), "Connected To < "+ip+" >");
		CompoundBorder cb=new CompoundBorder(
			BorderFactory.createEmptyBorder(5,10,10,10),
			connectedBorder);
		centerPanel.setBorder(cb);
		invalidate();
		repaint();
	}

	public void error(String error) {
		error(error, null);
	}
	public void error(String error, String heading) {
		if(error==null || error.equals(""))
			return;
		if(heading==null)
			heading = "Error";
		JOptionPane.showMessageDialog(CmdConsole.this,
			   error, heading, JOptionPane.ERROR_MESSAGE);
	}
	
	public static void writeFile(String fileName, String text) 
		throws IOException {
		PrintWriter out = null;
		try {
			out = new PrintWriter(
				new BufferedWriter(new FileWriter(fileName)));
			out.print(text);	
		} finally {
			if(out!=null) out.close();
		}
	}

	public void setSendEdit(boolean flag) {
		sendButton.setEnabled(flag);
		sendField.setEditable(flag);
	}

	public void updateConnectionStatus(boolean connected) {
		if(connected==false) {
			changeBorder(null);
		} else {
			changeBorder(qsadminMain.getIpAddress());
		}
	}
}

⌨️ 快捷键说明

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