`
junlas
  • 浏览: 63546 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

练手java GUI(一)

    博客分类:
  • java
阅读更多

java swing 已经基本上忘的差不多了,没事的时候开始练手了。希望走过路过的大虾不吝赐教,多多指点~~~谢先..

下面做的是一个一对一聊天的小程序:

 

 

第一步:设计视图;

 

package j2se.gui;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MainFrame extends Frame {
	private List list;
	private Panel panel;
	private Panel ipPanel;
	private Panel dataPanel;
	private TextField txtIP;
	private TextField txtData;
	private WindowClosingDispose windowClosingDispose;
	private Label labelIP;
	private Label labelData;

	public MainFrame() {
		setData();
		setShow();
		setFrame();
		setListener();
	}

	private void setData() {
		list = new List(10);
		panel = new Panel();
		ipPanel = new Panel();
		dataPanel = new Panel();
		labelIP = new Label("对方IP:");
		labelData = new Label("您要说:");
		txtIP = new TextField(20);
		txtIP.setText("127.0.0.1");
		txtData = new TextField(50);
	}

	private void setShow() {
		this.add(list,BorderLayout.CENTER);
		this.add(panel,BorderLayout.SOUTH);
		panel.setLayout(new BorderLayout());
		ipPanel.setLayout(new BorderLayout());
		dataPanel.setLayout(new BorderLayout());
		ipPanel.add(labelIP,BorderLayout.WEST);
		ipPanel.add(txtIP,BorderLayout.EAST);
		dataPanel.add(labelData,BorderLayout.WEST);
		dataPanel.add(txtData,BorderLayout.EAST);
		panel.add(ipPanel,BorderLayout.WEST);
		panel.add(dataPanel,BorderLayout.EAST);
		windowClosingDispose = this.new WindowClosingDispose();
	}

	private void setFrame() {
		this.setBounds(200, 100, 700, 500);
		this.setTitle("Chat");
		this.setVisible(true);
	}

	private void setListener() {
		this.addWindowListener(windowClosingDispose);
	}
	
	private class WindowClosingDispose extends WindowAdapter{

		@Override
		public void windowClosing(WindowEvent arg0) {
			super.windowClosing(arg0);
			MainFrame.this.dispose();
			System.exit(0);
		}
		
	}

	public List getList() {
		return list;
	}

	public TextField getTxtIP() {
		return txtIP;
	}

	public TextField getTxtData() {
		return txtData;
	}
}

 

 

 

第二步:设计socket逻辑,本例中使用UDP协议:

 

package j2se.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class MessageTransform {
	private MainFrame mainFrame;
	private DatagramSocket dsSender;
	private Thread receierThread;
	private DatagramSocket dsReceiver;
	private int PortReceiver = 3000;
	private int bufLengthReceiver = 1024;

	public MessageTransform(MainFrame mainFrame) {
		this.mainFrame = mainFrame;
		initData();
		initSender();
		initReceiver();
	}

	private void initData() {
		try {
			dsSender = new DatagramSocket();
			dsReceiver = new DatagramSocket(PortReceiver);
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}

	private void initSender() {
		mainFrame.getTxtData().addActionListener(this.new SenderAction());
	}

	private void initReceiver() {
		receierThread = new Thread(this.new ReceiverAction());
		receierThread.start();
	}

	private class SenderAction implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			String sendData = mainFrame.getTxtData().getText();
			if (sendData.isEmpty() || sendData.length() <= 0) {
				return;
			}
			mainFrame.getList().add("您说:      "+sendData,0);
			byte[] buf = sendData.getBytes();
			try {
				DatagramPacket dp = new DatagramPacket(buf, buf.length,
						InetAddress.getByName(mainFrame.getTxtIP().getText()),
						PortReceiver);
				dsSender.send(dp);
			} catch (UnknownHostException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			mainFrame.getTxtData().setText("");
		}

	}

	private class ReceiverAction implements Runnable {

		@Override
		public void run() {
			byte[] buf = new byte[bufLengthReceiver];
			DatagramPacket dp = new DatagramPacket(buf, bufLengthReceiver);
			while (true) {
				try {
					dsReceiver.receive(dp);
					mainFrame.getList().add(new String(buf,0,dp.getLength())+"      from:" + dp.getAddress().getHostAddress()+":"+dp.getPort(), 0);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

}

 

第三部:程序入口:

package j2se.gui;

public class Chat {
	private MainFrame mainFrame;
	private MessageTransform messageTransform;

	public Chat() {
		mainFrame = new MainFrame();
		messageTransform = new MessageTransform(mainFrame);
	}

	public static void main(String[] args) {
		new Chat();
	}
}

 

 

分享到:
评论
6 楼 junlas 2010-12-02  
qianhd 写道
玩具      


哈哈,过奖了,要是我自己评价,就是连玩具都不如,玩具最起码还是有一定的利用价值~~~
5 楼 junlas 2010-12-02  
sam_kee 写道
能在局域网通信吗?


可以~~
4 楼 sam_kee 2010-12-02  
能在局域网通信吗?
3 楼 junlas 2010-11-30  
zgzdzh 写道
把中文全部写在properties里用unicode编码保存。。。要不然到Linux下还是乱码。。


十分感谢,回头试试。。
2 楼 zgzdzh 2010-11-29  
把中文全部写在properties里用unicode编码保存。。。要不然到Linux下还是乱码。。
1 楼 junlas 2010-11-29  
上面的程序在有些机器上跑,显示出的是乱码,想知道应该怎么改??

相关推荐

    java小项目,是一个GUI的练手

    使用java语言,开发一个模拟太阳系的GUI小项目。主要是对GUI部分的使用以及对于java项目如何打包的方式的实践。

    Chinese Chess game made by Java GUI. Java-GUI制作的象棋游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    Java Web练手做的一个无聊网页小游戏,持续完善中.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    java gui实现的雷霆战机游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    java练手小项目

    "Java练手小项目"通常是指使用Java编程语言进行实践操作的小型应用程序,旨在帮助开发者提升技能、熟悉Java特性和编程流程。在这个特定的案例中,我们关注的是一个名为"简易通企业进销存管理系统"的项目。进销存管理...

    JAVA GUI 实现的QQ游戏里 怪物对对碰游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    基于java gui实现的贪吃蛇小游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    基于 java gui编程实现的贪吃蛇小游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    Java GUI desin

    综上所述,Java GUI设计不仅仅涉及编程技巧,更是一项融合了心理学、人机交互学等多学科知识的综合性工作。通过遵循上述原则,设计师可以构建出既美观又实用的用户界面,从而提升用户体验,增强应用程序的竞争力。

    java+GUI做的一个贪吃蛇小游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    Java GUI 实现的策略游戏——蜜蜂王国!(附exe文件).zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    Java swing小游戏,纯练手.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    2048游戏,java-gui.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    基于Java+Swing的石头剪刀布游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    Java练手_电子时钟

    在本项目"Java练手_电子时钟"中,我们主要关注的是如何使用Java编程语言来实现一个实时更新的数字时钟。这个练习涉及到多个Java技术领域,包括Java线程、AWT(Abstract Window Toolkit)绘图库以及Swing组件库。下面...

    java入门练手游戏项目,仿天天酷跑,适合巩固java基础.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    Java实现的狼人杀小游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    俄罗斯方块游戏(练手), 基于java-swing.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    java基础GUI框架完成的贪吃蛇小游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

Global site tag (gtag.js) - Google Analytics