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>");
chUnderline.setOpaque(true);
p.add(lFont);
p.add(cType);
p.add(cColor);
p.add(cSize);
p.add(cModel);
p.add(chBoldface);
p.add(chItalic);
p.add(chUnderline);
cType.addItemListener(this);
cColor.addItemListener(this);
cSize.addItemListener(this);
chBoldface.addActionListener(this);
chItalic.addActionListener(this);
}
//实现按钮动作监听
public void actionPerformed(ActionEvent ae)
{
setSendType();
}
//实现项目监听
public void itemStateChanged(ItemEvent ie)
{
Object comboBox=ie.getSource();
if (comboBox==cType || comboBox==cSize)
{
setSendType();
}
else if (comboBox==cColor)
{
String[] colorCode={"#000000","#FF0000","#00FF00","#FFCC00","#0000FF"};
int i=cColor.getSelectedIndex();
tp3.setForeground(Color.decode(colorCode[i]));
}
}
public void setSendType()
{
String sType=(String)cType.getSelectedItem();
int iBold=0;
int iItalic=0;
if (chBoldface.isSelected())
iBold=Font.BOLD;
if (chItalic.isSelected())
iItalic=Font.ITALIC;
int iModel=iBold+iItalic;
int iSize;
if (cSize.getSelectedIndex()==0)
iSize=12;
else
iSize=cSize.getSelectedIndex()*2+9;
tp3.setFont(new Font(sType,iModel,iSize));
}
}
[解决办法]
if (! lFace.getText().equals("0"))
{
toMessage=toMessage+"<img border=0 src=file:client/image/face/"+lFace.getText()+".gif>";//获取表情
lFace.setIcon(new ImageIcon("client/image/face/0.gif"));
lFace.setText("0");
}
///
0为选择的表情的设置的变量,主要是用img
[解决办法]
强人
[解决办法]
这位兄弟能吧代码发给我看看不,邮箱:t_yumin77@163.com
[解决办法]
偶也想看看 18435877@163.com
[解决办法]
用代码替换阿
[解决办法]
没弄过呢