日期:2014-05-20  浏览次数:20609 次

JAVA聊天室问题紧急求助
小弟是菜鸟,正做一个java聊天室系统,现已经做到多人聊天了,但只能发文字,请问各路大虾们如何发送图片呢?用什么样的格式来承载图片呢?如TextArea等?还有发送表情、改变要发送的字体等等?

------解决方案--------------------
帮顶
------解决方案--------------------
up
------解决方案--------------------
很难...
在.net中有RichTextBox作为容器来实现,其中的内容是rtf格式文本,保存其中内容可以很轻易的发现是文本和二进制代码混合出来的,写字板可读.
但在java中没有..尽管API中有提到rtf,但说明是尚未完成...当然,你可以挑战这个来实现...- -!

不过有个折中的办法,使用JEditorPane作为文本容器,它其中的文字可以使用HTML文档,也就可以改变文字...
头像可以存在于服务器上,利用<img>标签来引用

至于实时的图像,就比较麻烦了...你可以截获发送的字符串内容,解析出图像在客户端的路径,上传到服务器,生成地址,更改原字符串把图像引用插入其中
------解决方案--------------------
////////////////////////////////////////////////////////////////////////根据所选择的字体类//型来显示
if (setType.cColor.getSelectedIndex()!=0)//对应字体颜色的选择
{
String[] colorCode={"#FFFFFF","#FF0000","#00FF00","#FFCC00","#0000FF"};
int i=setType.cColor.getSelectedIndex();
toMessage="<font color="+colorCode[i]+">"+toMessage+"</font>";
}

if (setType.cSize.getSelectedIndex()!=0)//对应字体大小的选择
{
String h=String.valueOf(setType.cSize.getSelectedIndex());
toMessage="<font size="+h+">"+toMessage+"</font>";
}
if (setType.cModel.getSelectedIndex()!=0)//对应字体字型的选择
{
String h=String.valueOf(setType.cModel.getSelectedIndex());
toMessage="<h"+h+">"+toMessage+"</h"+h+">";
}
if (setType.chBoldface.isSelected())//字体的加粗
toMessage="<b>"+toMessage+"</b>";
if (setType.chItalic.isSelected())
toMessage="<i>"+toMessage+"</i>";
if (setType.chUnderline.isSelected())//字体的下划线
toMessage="<u>"+toMessage+"</u>";


/////////////////////////////////////////////////////////////////////////////字体选择界面
class SetType extends JWindow implements ActionListener,ItemListener
{
JPanel p;
JLabel lFont;
JButton Chyanse;
JComboBox cType,cModel,cSize,cColor;
JCheckBox chBoldface,chItalic,chUnderline;
public SetType()
{p=new JPanel();
getContentPane().add(p);
setVisible(false);
setSize(500,35);
setLocation(400,620);
p.setBorder(BorderFactory.createLineBorder(Color.red,2));
p.setBackground(Color.white);

lFont=new JLabel("字体:");

String[] sType={"宋体","楷体","隶书","仿宋体","黑体","幼圆","方正舒体","方正姚体"};
cType=new JComboBox(sType);
String[] sColor={"字体色","红色","绿色","黄色","蓝色"};
cColor=new JComboBox(sColor);

String[] sSize={"大小","一号","二号","三号","四号","五号","六号","七号"};
cSize=new JComboBox(sSize);
String[] sModel={"不强调","强调一","强调二","强调三","强调四","强调五","强调六"};
cModel=new JComboBox(sModel);
chBoldface=new JCheckBox("加粗");
chBoldface.setFont(new Font("宋体",Font.BOLD,12));
chBoldface.setOpaque(false);
chItalic=new JCheckBox("倾斜");
chItalic.setFont(new Font("宋体",Font.ITALIC,12));
chItalic.setOpaque(false);
chUnderline=new JCheckBox("<html><u>下划线</u>");