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

📄 massageboard2.java

📁 一个简单的具有网络功能的留言板程序
💻 JAVA
字号:
package MassageBoard2;

import java.awt.event.*;
import java.awt.*;
import java.io.IOException;
import java.net.*;

import javax.swing.*;
import javax.swing.event.*;

public class MassageBoard2 
{
	public static void main(String[] args)
	{
		MassageBoardFrame frame = new MassageBoardFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

class MassageBoardFrame extends JFrame
{
	public MassageBoardFrame()
	{
		// set frame title
		setTitle("MassageBoard");
		// get screen dimensions
		Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension screenSize = kit.getScreenSize();
		int screenHeight = screenSize.height;
		int screenWidth = screenSize.width;
		// center frame in screen
		setSize(screenWidth / 2, screenHeight / 2);
		setLocation(screenWidth / 4, screenHeight / 11);
		MassageBoardPanel panel = new MassageBoardPanel();
		add(panel);
		pack();
	}
}

class MassageBoardPanel extends JPanel
{
	public MassageBoardPanel()
	{
		setLayout(new BorderLayout());
		textArea1 = new JTextArea(20,35);
		textArea1.setEditable(false);
		textArea1.setLineWrap(true);
		scrollPane1 = new JScrollPane(textArea1);
		textArea1.setBackground(Color.GREEN);
		panel1 = new JPanel();
		panel1.setLayout(new BorderLayout());
		panel1.add(scrollPane1,BorderLayout.CENTER);
		
		panel2 = new JPanel(new BorderLayout());
		
	    label1 = new JLabel("FONT");
		box1 = new JComboBox();
		box1.addItem("Times New Roman");
		box1.addItem("Serif");
		box1.addItem("SansSerif");
		box1.addItem("Monospaced");
		box1.addItem("Dialog");
		box1.addItem("DialogInput");
		box1.addItem("宋体");
		box1.addItem("楷体_GB2312");
		box1.addItem("黑体");
		box1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				fontName = box1.getSelectedItem().toString();
				textArea1.setFont(new Font(fontName,Font.PLAIN,fontSize));
			}
		});
		
		label2 = new JLabel("SIZE");
		textField1 = new JTextField(4);
		textField1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				fontSize = Integer.parseInt(textField1.getText());
				textArea1.setFont(new Font(fontName,Font.PLAIN,fontSize));
			}
		});
		setPanel = new JPanel();
		button4 = new JButton("B");
		button4.setFont(new Font("",Font.BOLD,14));
		button4.addActionListener(new SetStyle());
		
		button5 = new JButton("I");
		button5.setFont(new Font("",Font.ITALIC,14));
		button5.addActionListener(new SetStyle());
		
		label3 = new JLabel("Expression"); 
		box2 = new JComboBox();
		box2.addItem("*_*");
		box2.addItem("^_^");
		box2.addItem("#_#");
		box2.addItem("︶︹︺");
		box2.addItem("^︵^");
		box2.addItem("@_@");
		box2.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				expression = box2.getSelectedItem().toString();
				textArea2.append(expression);
			}
		});
		
		setPanel.add(label1);
		setPanel.add(box1);
		setPanel.add(label2);
		setPanel.add(textField1);
		setPanel.add(button4);
		setPanel.add(button5);
		setPanel.add(label3);
		setPanel.add(box2);
		
		ipPanel = new JPanel();
		addressField=new JTextField("127.0.0.1",7);
		aimPortField=new JTextField("1234",6);
		selfPortField=new JTextField("1235",6);
		ipButton=new JButton("SET");
		ipButton.addActionListener(new setIPAction());

		ipPanel.add(new JLabel("AimAddress"));
		ipPanel.add(addressField);
		ipPanel.add(new JLabel("AimPort"));
		ipPanel.add(aimPortField);
		ipPanel.add(new JLabel("ListeningPort"));
		ipPanel.add(selfPortField);
		ipPanel.add(ipButton);
		
		panel1.add(panel2,BorderLayout.SOUTH);
		panel2.add(setPanel,BorderLayout.SOUTH);
		panel2.add(ipPanel,BorderLayout.NORTH);
		this.add(panel1,BorderLayout.CENTER);
		
		try
		{
			address = InetAddress.getByName(addressField.getText());
			aimPort = Integer.parseInt(aimPortField.getText().trim());
	        selfPort = Integer.parseInt(selfPortField.getText().trim());
		}
		catch (UnknownHostException e)
		{
			e.printStackTrace();
		}

		
		panel3 = new JPanel();
		panel3.setLayout(new BorderLayout());

		panel4 = new JPanel();
		panel4.setLayout(new BorderLayout());
		panel4.add(new JLabel("Name:"),BorderLayout.WEST);
		textField2 = new JTextField(10);
		panel4.add(textField2,BorderLayout.CENTER);
		panel3.add(panel4,BorderLayout.NORTH);

		panel5 = new JPanel();
		panel5.setLayout(new BorderLayout());
		panel5.add(new JLabel("Massage:"),BorderLayout.WEST);
		textArea2 = new JTextArea(4,35);
		textArea2.setLineWrap(true);
		scrollPane2 = new JScrollPane(textArea2);
		panel5.add(scrollPane2,BorderLayout.CENTER);
		panel3.add(panel5,BorderLayout.CENTER);
		
		panel6 = new JPanel(new GridLayout(1,3,5,0));
		button1 = new JButton("Font Color");
		button1.addActionListener(new SetColor());
		button2 = new JButton("Background Color");
		button2.addActionListener(new SetColor());
		button3 = new JButton("deliver");
		button3.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				String name = textField2.getText();
				String word = textArea2.getText();
				if(!(textArea2.getText().equals(""))&&!(textField2.getText().equals("")))
				{
					textArea1.append(" "+name+":\n   "+word+"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
					textArea2.setText("");
					textArea2.requestFocus();
					DatagramSocket ds = null;
					try {
						ds = new DatagramSocket();
					} catch (SocketException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					String message = " "+name+":\n\n   "+word+"\n";
					DatagramPacket dp = new DatagramPacket(message.getBytes(),message.getBytes().length,address,aimPort);
					try 
					{
						ds.send(dp);
						ds.close();
					} 
					catch (IOException e) 
					{
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		});
		textArea2.addKeyListener(new KeyListener()
		{
			public void keyPressed(KeyEvent e) 
			{
				//TODO Auto-generated method stub
				
			}
			public void keyReleased(KeyEvent e) 
			{
				// TODO Auto-generated method stub
			}
			public void keyTyped(KeyEvent event) 
			{
				if(event.getKeyChar() == '\n'&&event.isControlDown())
				{
					String name = textField2.getText();
					String word = textArea2.getText();
					if(!(textArea2.getText().equals(""))&&!(textField2.getText().equals("")))
					{
						textArea1.append(" "+name+":\n   "+word+"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
						textArea2.setText("");
						textArea2.requestFocus();
						DatagramSocket ds = null;
						try {
							ds = new DatagramSocket();
						} catch (SocketException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						String message = " "+name+":\n\n   "+word+"\n";
						DatagramPacket dp = new DatagramPacket(message.getBytes(),message.getBytes().length,address,aimPort);
						try {
							ds.send(dp);
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						ds.close();
					}
				}
			}
		});
		panel6.add(button1);
		panel6.add(button2);
		panel6.add(button3);
		panel3.add(panel6,BorderLayout.SOUTH);
		this.add(panel3,BorderLayout.SOUTH);
	}
	
	private class SetStyle implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String letter = event.getActionCommand();
			times++;
			if(times%2 == 0)
			{
				textArea1.setFont(new Font("", 0, fontSize));
				if(letter.equals("B"))
				{
					button4.setBackground(Color.WHITE);
				}
				if(letter.equals("I"))
				{
					button5.setBackground(Color.WHITE);
				}
			}
			else
			{
				int mode = 0;
				if(letter.equals("B"))
				{
					mode += Font.BOLD;
					button4.setBackground(Color.LIGHT_GRAY);
				}
				if(letter.equals("I"))
				{
					mode += Font.ITALIC;
					button5.setBackground(Color.LIGHT_GRAY);
				}
				textArea1.setFont(new Font("", mode, fontSize));
			}
		}
	}
	private class SetColor implements ActionListener
	{
		 public SetColor()
		 {
		      chooser = new JColorChooser();
		      chooser.getSelectionModel().addChangeListener(new ChangeListener()
		      {
		           public void stateChanged(ChangeEvent event)
		           {
		        	   if(s.equals("Font Color"))
		        	   {
		        		   textArea1.setForeground(chooser.getColor());
		        	   }
		               if(s.equals("Background Color"))
		               {
		            	   textArea1.setBackground(chooser.getColor());
		               }
		            }
		      });
		      dialog = new JDialog((Frame) null, false);
		      dialog.add(chooser);
		      dialog.pack();
		  }
		  public void actionPerformed(ActionEvent event)
		  {
			  s=event.getActionCommand();
		      dialog.setVisible(true);
		      dialog.setTitle(s);
		  }
		  private JDialog dialog;
		  private JColorChooser chooser;
		  private String s;
	}
	private class setIPAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			try
			{
				address = InetAddress.getByName(addressField.getText());
	       	 	aimPort = Integer.parseInt(aimPortField.getText().trim());
	            selfPort = Integer.parseInt(selfPortField.getText().trim());
			}
			catch (Exception e) {
			}
		}
	}
	private class Receive extends Thread
	{
		public Receive()
		{
			super();
			start();
		}
		public void run()
		{
			//DatagramSocket ds = null;
			try
			{
				ds = new DatagramSocket(selfPort);
			}
			catch (SocketException e)
			{
				e.printStackTrace();
			}
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf,buf.length);
			try 
			{
				ds.receive(dp);
			}
			catch(NullPointerException e)
			{
				textArea1.append("此端口已经被使用");
			}
			catch(IOException e)
			{
				e.printStackTrace();
			}
			String message = new String(dp.getData(),0,dp.getLength()) +
						"\n from " + dp.getAddress() + ":" + dp.getPort()
						+"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

			textArea1.append(message);
			ds.close();
			this.run();
		}
		DatagramSocket ds = null;
	}
	private JTextArea textArea1;
	private JScrollPane scrollPane1;
	private JPanel panel1;
	private JLabel label1;
	private JComboBox box1;
	private JLabel label2;
	private JTextField textField1;
	private JPanel panel2;
	private String fontName;
	private int fontSize;
	private JPanel panel3;
	private JPanel panel4;
	private JPanel panel5;
	private JTextField textField2;
	private JTextArea textArea2;
	private JScrollPane scrollPane2;
	private JPanel panel6;
	private JButton button1;
	private JButton button2;
	private JButton button3;
	private JButton button4;
	private JButton button5;
	private JPanel ipPanel;
	private JPanel setPanel;
	private JButton ipButton;
	private JTextField addressField;
	private JTextField aimPortField;
	private JTextField selfPortField;
	private InetAddress address;
	private int aimPort;
	private int selfPort;
	private int times = 0;
	private JLabel label3;
	private JComboBox box2;
	private String expression;
}

⌨️ 快捷键说明

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