仿RTX腾讯通

bear2020 2012-08-24 11:52:03
初学JAVA,想做一个仿RTX的即时通讯软件。我只是前段时间简单看过韩顺平老师的JAVA视频教程,没有系统学过JAVA。所以我想把自己写的代码贴出来,让大家帮忙指点纠正,请大家多多指教。
...全文
477 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2012-08-26
  • 打赏
  • 举报
回复
加载图片的代码也有点乱,原因在于不了解Image和ImageIcon是怎么回事。

搞清楚上面这些问题,对代码进行了优化精简以后,这个界面设计就告一段落了,下面开始设计登陆后的界面。
「已注销」 2012-08-26
  • 打赏
  • 举报
回复
从生成一个LoginPanel类,然后用DDT类去调用它的成员方法,把自身作为参数专进去,这种思想是错的,是面向过程的思想,根本没有理解什么是类。

在LoginPanel类中没有构造方法,原因是没有理解什么是构造方法,还以为只要是跟类同名的方法就是构造方法。


另外,发现在这里发一堆代码,压根没人会看。没人纠正我的错误,没人指点我优化代码,也就达不到我的目的,发代码就没有意义了,基本得不到什么帮助。

而且论坛老抽筋,老看不到最后的回复,处理速度有点慢。

blackhally 2012-08-26
  • 打赏
  • 举报
回复
加油,我现在什么还都不会。。。
Paradiso1900 2012-08-26
  • 打赏
  • 举报
回复
又一个gui大神....
bear2020 2012-08-25
  • 打赏
  • 举报
回复
哎,没看书也就算了,连视频教程也是粗略看一遍,就想编个软件了,想想自己真逗,竟然连这么简单的问题就难倒我了。。。

JPanel的边界布局无效,原因在于,要先设置布局方式,再添加组件。我习惯了先添加组件再设置布局,结果怎么改布局就是默认的改不了。
this.setLayout(new BorderLayout());
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.CENTER);

威客的朋友帮我解决了,我又看了一下韩顺平老师的JAVA视频第30讲——布局管理器。
开发GUI程序步骤:
1、继承JFrame
2、定义需要的组件
3、创建组件
4、设置布局管理器
5、添加组件
6、显示窗体

教程讲得很清楚,都怪自己没认真看。妹的,谁知道先后顺序都不能换。。。

边做边学也挺累的,可是对我来说看教程太无聊了,只能边做边学才能动力,不过速度太慢了。
bear2020 2012-08-25
  • 打赏
  • 举报
回复
上面这个问题,我发到威客网了http://www.680.com/174569.html
虽然只有50元,有兴趣的话帮忙解决一下吧,谢谢。
bear2020 2012-08-25
  • 打赏
  • 举报
回复
求助,为什么JPanel的BorderLayout布局没效果。

源码下载


1、DDT.java 主程序


import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JPanel;
import javax.swing.UIManager;

public class DDT {
public static void main(String[] args) {
//设置统一字体
Font font=new Font("宋体,Arial",Font.PLAIN,12);
UIManager.put("Label.font", font);
UIManager.put("CheckBox.font", font);
UIManager.put("Button.font", font);
UIManager.put("Menu.font", font);
UIManager.put("MenuItem.font", font);
//创建主界面
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
MainFrame mf; //软件主界面框架
JPanel jpLogin; //登陆界面Panel
LoginPanel lp;//登陆界面

mf=new MainFrame();
mf.Show(true);
//加载登陆界面
jpLogin=new JPanel();
lp=new LoginPanel();
lp.LoginPanel(jpLogin);
mf.add(jpLogin,BorderLayout.CENTER);
//mf.remove(jpLogin);//移除登陆界面

//加载登陆后用户界面
//……
}
});
}
}


2、MainFrame.java 主窗体设计


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

public class MainFrame extends JFrame{
private TrayIcon trayIcon=null;
//构造函数
public MainFrame(){
this.setTitle("三点水商务通"); //设置窗口标题
this.setSize(256, 650); //设置登陆界面的大小
Dimension disonScreen = Toolkit.getDefaultToolkit().getScreenSize(); //获得屏幕尺寸
this.setLocation(disonScreen.width-500, 50); //初始化登陆界面的位置,靠屏幕右边。
this.setMinimumSize(new Dimension(240,500)); //限制登陆界面缩放的最小范围。
try{
Image image= new ImageIcon("images/icon.gif").getImage();
this.setIconImage(image); //设置标题图标
}catch(Exception e){
e.printStackTrace();
}
this.addMenu(); //创建菜单
this.addTray(); //创建系统托盘
}
//显示主界面
public void Show(boolean visable){
if(this.isVisible()!=visable){
this.setVisible(visable);
}
}
//创建菜单的方法。
public void addMenu(){
//创建菜单栏
JMenuBar menuBar=new JMenuBar();
this.setJMenuBar(menuBar);

//创建菜单项目
String menuStr="文件(F),联系人(C),操作(A),帮助(H)"; //具体菜单项目在这里修改。
String menuStrs[]=menuStr.split(",");
int menuNum=menuStrs.length; //获得菜单项目的个数。
//把每个菜单项目添加到菜单栏
JMenu menu[]=new JMenu[menuNum];
for(int i=0;i<menuNum;i++){ //循环添加。未完成功能:判断字符串中是否包含小括号,截取小括号中的字母,设置快捷键。
menu[i]=new JMenu(menuStrs[i]);
menuBar.add(menu[i]);
}
//为每个菜单项目创建下拉选项
String menuItemList[]=new String[menuNum]; //创建下拉菜单数组。注意每个数组元素的内容跟菜单项目顺序对应。
menuItemList[0]="更改用户(W),我的状态,个人设置(P),系统设置(S),退出(X)"; //第一个菜单项目的下拉选项,即"文件(F)"下面有这么多选项。
menuItemList[1]="查找联系人,管理员联系人,管理自定义组,管理常用部门"; //第二个菜单项目的下拉选项,即"联系人(C)"下面有这么多选项。
//添加下拉选项到各自所属的菜单项目中
for(int i=0;(i<menuNum && i<2);i++){ //注意根据上面menuItemList[i]的实际个数修改i<2这个条件。
String menuItems[]=menuItemList[i].split(",");
int ItemNum=menuItems.length;
for(int j=0;j<ItemNum;j++){
JMenuItem Item=new JMenuItem(menuItems[j]);
menu[i].add(Item);
}
}
}
//创建"系统托盘”的方法
public void addTray(){
if(SystemTray.isSupported()){//检查当前系统是否支持系统托盘
SystemTray tray=SystemTray.getSystemTray();
PopupMenu popMenu=new PopupMenu();
MenuItem mi1=new MenuItem("个人设置(P)");
MenuItem mi2=new MenuItem("系统设置(S)");
MenuItem mi3=new MenuItem("上线");
MenuItem mi4=new MenuItem("离开");
MenuItem mi5=new MenuItem("离线");
MenuItem mi6=new MenuItem("显示主界面(M)");
MenuItem exitItem=new MenuItem("退出(X)");
popMenu.add(mi1);
popMenu.add(mi2);
popMenu.add(new MenuItem("-"));
popMenu.add(mi3);
popMenu.add(mi4);
popMenu.add(mi5);
popMenu.add(new MenuItem("-"));
popMenu.add(mi6);
popMenu.add(new MenuItem("-"));
popMenu.add(exitItem);
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
System.exit(0);
}catch(Exception ex){
ex.printStackTrace();
}
}
});
try{
Image image=new ImageIcon("images/dd1.gif").getImage();
trayIcon=new TrayIcon(image,"点点商务通",popMenu);
}catch(Exception e){
e.printStackTrace();
}
trayIcon.addMouseListener(new java.awt.event.MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
Show(true);
}
}
});
try{
tray.add(trayIcon);
}catch(Exception e){
System.out.print(e);
}
}else{
System.out.print("您的系统不支持系统托盘");
}
}
}


3、LoginPanel.java 登陆界面设计

import java.awt.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class LoginPanel {
public void LoginPanel(JPanel obj){
//北部区域
JPanel jp1;
JLabel jl2; //LOGO图片
//中部区域
JPanel jp2;
JTextField jtf1; //帐号输入框
JPasswordField jpf1; //密码输入框
JLabel jl3; //空行,调整距离
JLabel jl4; //帐号
JLabel jl5; //密码
JLabel jl6; //登陆状态
JCheckBox jcb1; //记住密码
JCheckBox jcb2; //自动登陆
JButton jb1; //登陆按扭
//南部区域
JPanel jp3;
JLabel jl1; //底纹图片

//北部区域,添加LOGO“点点卡通形象”。
jp1=new JPanel();
try{
//Image image= ImageIO.read(obj.getClass().getResource("images/dd.gif"));
ImageIcon icon= new ImageIcon("images/dd.gif");
jl2=new JLabel();
jl2.setIcon(icon);
jp1.add(jl2);
}catch(Exception e){
e.printStackTrace();
}

//中部区域,登陆框
jp2=new JPanel();
jl3=new JLabel(""); //空一行,调整与上方图片的距离
jl4=new JLabel("帐号:");
jl5=new JLabel("密码:");
jtf1=new JTextField(15); //帐号输入框,宽度15,内间距:上0px右2px下1px左2px。
jtf1.setBorder(BorderFactory.createCompoundBorder(jtf1.getBorder(),BorderFactory.createEmptyBorder(0,2,1,2)));
jpf1=new JPasswordField(15); //密码输入框
jpf1.setEchoChar('*');
jpf1.setBorder(BorderFactory.createCompoundBorder(jpf1.getBorder(),BorderFactory.createEmptyBorder(1,2,0,2)));
jl6=new JLabel("登陆状态:");
jcb1=new JCheckBox("记住密码");
jcb2=new JCheckBox("自动登陆");
JPanel jp_ct=new JPanel(); //把所有登陆框的标签集中放到这个Panel里。
jp_ct.add(jl3);
jp_ct.add(jl4);
jp_ct.add(jtf1);
jp_ct.add(jl5);
jp_ct.add(jpf1);
jp_ct.add(jl6);
jp_ct.add(jcb1);
jp_ct.add(jcb2);
jp_ct.setLayout(new GridLayout(8,1));//登陆框所有标签使用网络布局
//登陆按扭
jb1=new JButton(" 登陆 ");
JPanel jp_bt=new JPanel();
jp_bt.add(jb1);
jp_bt.setLayout(new FlowLayout(FlowLayout.CENTER));
//中部区域
JPanel jp_md=new JPanel();
jp_md.add(jp_ct); //把登陆框加入到这个Panel里
jp_md.add(jp_bt); //把登陆按扭加入到这个Panel里
jp_md.setLayout(new GridLayout(2,1));
jp2.add(jp_md); //中部区域加入所有元件。
jp2.setLayout(new FlowLayout()); //设置中部区域方式

//南部区域,界面底部图案
jp3=new JPanel();
try{
//Image image= ImageIO.read(obj.getClass().getResource("images/ul_bt.gif"));
ImageIcon icon= new ImageIcon("images/ul_bt.gif");
jl1 = new JLabel("",icon,JLabel.RIGHT);
jl1.setBackground(new Color(201, 213, 227));
jl1.setOpaque(true);
jp3.add(jl1);
}catch(Exception e){
e.printStackTrace();
}

obj.add(jp1,BorderLayout.NORTH);
obj.add(jp2,BorderLayout.CENTER);
obj.add(jp3,BorderLayout.SOUTH);
}
}


为什么第3个程序里JPanel的布局不能实现北中南的布局,而是一种默认的FlowLayout布局?

请各位大虾们帮我运行调试一下,谢谢
humanity 2012-08-24
  • 打赏
  • 举报
回复
这个界面像 淘宝汪汪一样的蓝色,不错。
shuanghanyandan 2012-08-24
  • 打赏
  • 举报
回复
加油,对这个CS的东西也不太懂。
bear2020 2012-08-24
  • 打赏
  • 举报
回复
接下来我想把登陆窗口做到系统托盘里,让软件像QQ和RTX一样在右下角运行,而不显示在任务栏里。

bear2020 2012-08-24
  • 打赏
  • 举报
回复
呵呵,边做边学,不懂就百度呗

请问一下,下面这个代码有没有思想上的问题啊?说实在我对面向对像还不怎么懂。什么实例,方法我都乱套的,下面这样写行吗?


package Login;

import java.awt.*;
import javax.imageio.ImageIO;
import javax.swing.*;
//生成一个创建用户登陆界面的类UserLogin_Frame //
public class UserLogin_Frame extends JFrame {

//创建一个构造函数
public UserLogin_Frame(){

this.setTitle("三点水商务通");//设置窗口标题
this.setSize(256, 650); //设置登陆界面的大小
Dimension disonScreen = Toolkit.getDefaultToolkit().getScreenSize(); //获得屏幕尺寸
this.setLocation(disonScreen.width-500, 50);//初始化登陆界面的位置,靠屏幕右边。
this.setMinimumSize(new Dimension(240,500)); //限制登陆界面缩放的最小范围。
//设置标题图标
try{
Image image= ImageIO.read(this.getClass().getResource("images/icon.gif"));
this.setIconImage(image);
}catch(Exception e){
e.printStackTrace();
}
//调用"创建菜单"的方法
this.UserLogin_Menu();
//调用“创建登陆框”的方法
this.UserLogin_Panel();
//显示主界面
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

//生成一个“创建菜单”的成员方法。
public void UserLogin_Menu(){
//创建菜单栏
JMenuBar menuBar=new JMenuBar();
this.setJMenuBar(menuBar);

//创建菜单项目
String menuStr="文件(F),联系人(C),操作(A),帮助(H)"; //具体菜单项目在这里修改。
String menuStrs[]=menuStr.split(",");
int menuNum=menuStrs.length; //获得菜单项目的个数。
//把每个菜单项目添加到菜单栏
JMenu menu[]=new JMenu[menuNum]; //创建数组。
for(int i=0;i<menuNum;i++){ //循环添加。未完成功能:判断字符串中是否包含小括号,截取小括号中的字母,设置快捷键。
menu[i]=new JMenu(menuStrs[i]);
menuBar.add(menu[i]);
}
//为每个菜单项目创建下拉选项
String menuItemList[]=new String[menuNum]; //创建下拉菜单数组。注意每个数组元素的内容跟菜单项目顺序对应。
menuItemList[0]="更改用户(W),我的状态,个人设置(P),系统设置(S),退出(X)"; //第一个菜单项目的下拉选项,即"文件(F)"下面有这么多选项。
menuItemList[1]="查找联系人,管理员联系人,管理自定义组,管理常用部门"; //第二个菜单项目的下拉选项,即"联系人(C)"下面有这么多选项。
//添加下拉选项到各自所属的菜单项目中
for(int i=0;(i<menuNum && i<2);i++){ //注意根据上面menuItemList[i]的实际个数修改i<2这个条件。
String menuItems[]=menuItemList[i].split(",");
int ItemNum=menuItems.length;
for(int j=0;j<ItemNum;j++){
JMenuItem Item=new JMenuItem(menuItems[j]);
menu[i].add(Item);
}
}

}
//生成一个“创建登陆框”的方法
public void UserLogin_Panel(){
//北部区域
JPanel jp1;
JLabel jl2; //LOGO图片

//中部区域
JPanel jp2;
JTextField jtf1; //帐号输入框
JPasswordField jpf1; //密码输入框
JLabel jl3; //空行,调整距离
JLabel jl4; //帐号
JLabel jl5; //密码
JLabel jl6; //登陆状态
JCheckBox jcb1; //记住密码
JCheckBox jcb2; //自动登陆
JButton jb1; //登陆按扭

//南部区域
JLabel jl1; //底纹图片


jp1=new JPanel();
jp2=new JPanel();

//北部区域,添加LOGO“点点卡通形象”。
try{
Image image= ImageIO.read(this.getClass().getResource("images/dd.gif"));
ImageIcon icon= new ImageIcon(image);
jl2=new JLabel();
jl2.setIcon(icon);
jp1.add(jl2);
}catch(Exception e){
e.printStackTrace();
}
this.add(jp1,BorderLayout.NORTH);

//南部区域,界面底部图案
try{
Image image= ImageIO.read(this.getClass().getResource("images/ul_bt.gif"));
ImageIcon icon= new ImageIcon(image);
jl1 = new JLabel("",icon,JLabel.RIGHT);
jl1.setBackground(new Color(201, 213, 227));
jl1.setOpaque(true);
this.add(jl1,BorderLayout.SOUTH);
}catch(Exception e){
e.printStackTrace();
}

//登陆框
jl3=new JLabel(""); //空一行,调整与上方图片的距离
jl4=new JLabel("帐号:");
jl5=new JLabel("密码:");
jtf1=new JTextField(15); //帐号输入框,宽度15,内间距:上0px右2px下1px左2px。
jtf1.setBorder(BorderFactory.createCompoundBorder(jtf1.getBorder(),BorderFactory.createEmptyBorder(0,2,1,2)));
jpf1=new JPasswordField(15); //密码输入框
jpf1.setEchoChar('*');
jpf1.setBorder(BorderFactory.createCompoundBorder(jpf1.getBorder(),BorderFactory.createEmptyBorder(1,2,0,2)));
jl6=new JLabel("登陆状态:");
jcb1=new JCheckBox("记住密码");
jcb2=new JCheckBox("自动登陆");
JPanel jp_ct=new JPanel(); //把所有登陆框的标签集中放到这个Panel里。
jp_ct.add(jl3);
jp_ct.add(jl4);
jp_ct.add(jtf1);
jp_ct.add(jl5);
jp_ct.add(jpf1);
jp_ct.add(jl6);
jp_ct.add(jcb1);
jp_ct.add(jcb2);
jp_ct.setLayout(new GridLayout(8,1));//登陆框所有标签使用网络布局

//登陆按扭
jb1=new JButton(" 登陆 ");
JPanel jp_bt=new JPanel();
jp_bt.add(jb1);
jp_bt.setLayout(new FlowLayout(FlowLayout.CENTER));

//中部区域
JPanel jp_md=new JPanel();
jp_md.add(jp_ct); //把登陆框加入到这个Panel里
jp_md.add(jp_bt); //把登陆按扭加入到这个Panel里
jp_md.setLayout(new GridLayout(2,1));
jp2.add(jp_md); //中部区域加入所有元件。
jp2.setLayout(new FlowLayout()); //设置中部区域方式
this.add(jp2,BorderLayout.CENTER);

}

/**
* @param args
* 用户登陆界面(主程序)
* 三点水 大雄
*/
public static void main(String[] args) {

//设置统一字体
Font font=new Font("宋体,Arial",Font.PLAIN,12);
UIManager.put("Label.font", font);
UIManager.put("CheckBox.font", font);
UIManager.put("Button.font", font);
UIManager.put("Menu.font", font);
UIManager.put("MenuItem.font", font);

//创建一个用户登陆界面
UserLogin_Frame ul_f=new UserLogin_Frame();
}
}

  • 打赏
  • 举报
回复
不是吧,刚入门就做通讯软件了,厉害啊
bear2020 2012-08-24
  • 打赏
  • 举报
回复
源代码下载

目前只做了个界面,运行效果:
shuilongyinfeng 2012-08-24
  • 打赏
  • 举报
回复
这美工设计不错
shuilongyinfeng 2012-08-24
  • 打赏
  • 举报
回复
这美工设计不错
bear2020 2012-08-24
  • 打赏
  • 举报
回复
JAVA视频教程里提到软件开发的流程大致是1、需求分析;2、开发语言和数据库选择;3、界面设计;4、代码编写;5、软件测试;6、软件发布。

1、我的需求:做一个类似RTX的即时通讯软件,在公司QQ被禁用的情况下,代替QQ用于办公即时通信,同时可以自由修改和添加自己想要的功能。
2、开发语言和数据库的选择:JAVA+SQL Server2000。
3、界面设计:把需要的界面先设计好,然后再一步步实现功能。

我目前就徘徊在界面设计这个阶段,后面的路艰辛又漫长。

bear2020 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
支持楼主,偶佩服你!!!!!!!!!!!!!!!

“呵呵,边做边学,不懂就百度呗

说实在我对面向对像还不怎么懂。什么实例,方法我都乱套的,下面这样写行吗?”

面向对象特性:封装、抽象、继承、多态

一开始,我也不懂,我只会简单的用封装,把相关的方法和属性集合到一个类中,便于管理和寻找

稍微用点抽象,然后用继承,

多态也稍微用点,这个特性在某些方面还是很有用的
[/Quote]

多谢支持啊,呵呵,那么多东西要学起来感觉好难,想用好就更难了,只能走一步算一步了。
corn8888 2012-08-24
  • 打赏
  • 举报
回复
楼主,偶 佩服你!!!!!!!!!!!!!!!
corn8888 2012-08-24
  • 打赏
  • 举报
回复
支持楼主,偶佩服你!!!!!!!!!!!!!!!

“呵呵,边做边学,不懂就百度呗

说实在我对面向对像还不怎么懂。什么实例,方法我都乱套的,下面这样写行吗?”

面向对象特性:封装、抽象、继承、多态

一开始,我也不懂,我只会简单的用封装,把相关的方法和属性集合到一个类中,便于管理和寻找

稍微用点抽象,然后用继承,

多态也稍微用点,这个特性在某些方面还是很有用的
「已注销」 2012-08-24
  • 打赏
  • 举报
回复

源代码如下:

仿RTX代码.rar
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧