初学JAVA,想做一个仿RTX的即时通讯软件。我只是前段时间简单看过韩顺平老师的JAVA视频教程,没有系统学过JAVA。所以我想把自己写的代码贴出来,让大家帮忙指点纠正,请大家多多指教。

解决方案 »

  1.   

    呵呵,边做边学,不懂就百度呗请问一下,下面这个代码有没有思想上的问题啊?说实在我对面向对像还不怎么懂。什么实例,方法我都乱套的,下面这样写行吗?
    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();
    }
    }
      

  2.   

    接下来我想把登陆窗口做到系统托盘里,让软件像QQ和RTX一样在右下角运行,而不显示在任务栏里。
      

  3.   

    谢谢大家下午做了系统托盘。
    完成后的代码:
    package Login;import java.awt.*;
    import java.awt.event.*;
    import javax.imageio.ImageIO;
    import javax.swing.*;public class UserLogin_Frame extends JFrame {
    private TrayIcon trayIcon=null;
    //创建一个构造函数
    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_Login(); //创建登陆框
    this.UserLogin_Tray();  //创建系统托盘
    } //创建菜单的方法。
    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_Login(){
    //北部区域
    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;  //底纹图片

    //北部区域,添加LOGO“点点卡通形象”。
    jp1=new JPanel();
    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();
    } //中部区域,登陆框
    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());  //设置中部区域方式
    this.add(jp2,BorderLayout.CENTER); }

    //创建"系统托盘”的方法
    public void UserLogin_Tray(){
    if(SystemTray.isSupported()){//检查当前系统是否支持系统托盘
    SystemTray tray=SystemTray.getSystemTray();
    PopupMenu popMenu=new PopupMenu();
    MenuItem exitItem=new MenuItem("退出(X)");
    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)");
    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= ImageIO.read(this.getClass().getResource("images/dd1.gif"));
    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){
    ShowRTX(true);
    }
    }
    });
    try{
    tray.add(trayIcon);
    }catch(Exception e){
    System.out.print(e);
    }
    }else{
    System.out.print("您的系统不支持系统托盘");
    }

    }

    //显示主界面的方法
    public void ShowRTX(boolean visable){
    if(this.isVisible()!=visable){
    this.setVisible(visable);
    }
    }

    /**
     * @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);
    //创建一个用户登陆界面
            javax.swing.SwingUtilities.invokeLater(new Runnable(){
    public void run(){
    UserLogin_Frame ul_f=new UserLogin_Frame();
    ul_f.ShowRTX(true);
    }
    });
    }
    }
      

  4.   

    有3个问题没解决:
    1、打开软件界面,怎么不让它显示在系统任务栏里。
    2、怎么判断软件已经运行,而不让它重复开。
    3、在系统进程管理器中显示的是"javaw.exe",是不是要等代码转成可执行文件才能改名?
      

  5.   


    源代码如下:仿RTX代码.rar
      

  6.   

    JAVA视频教程里提到软件开发的流程大致是1、需求分析;2、开发语言和数据库选择;3、界面设计;4、代码编写;5、软件测试;6、软件发布。1、我的需求:做一个类似RTX的即时通讯软件,在公司QQ被禁用的情况下,代替QQ用于办公即时通信,同时可以自由修改和添加自己想要的功能。
    2、开发语言和数据库的选择:JAVA+SQL Server2000。
    3、界面设计:把需要的界面先设计好,然后再一步步实现功能。我目前就徘徊在界面设计这个阶段,后面的路艰辛又漫长。
      

  7.   

    求助,为什么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布局?请各位大虾们帮我运行调试一下,谢谢
      

  8.   

    上面这个问题,我发到威客网了http://www.680.com/174569.html
    虽然只有50元,有兴趣的话帮忙解决一下吧,谢谢。
      

  9.   

    哎,没看书也就算了,连视频教程也是粗略看一遍,就想编个软件了,想想自己真逗,竟然连这么简单的问题就难倒我了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、显示窗体教程讲得很清楚,都怪自己没认真看。妹的,谁知道先后顺序都不能换边做边学也挺累的,可是对我来说看教程太无聊了,只能边做边学才能动力,不过速度太慢了。
      

  10.   

    从生成一个LoginPanel类,然后用DDT类去调用它的成员方法,把自身作为参数专进去,这种思想是错的,是面向过程的思想,根本没有理解什么是类。在LoginPanel类中没有构造方法,原因是没有理解什么是构造方法,还以为只要是跟类同名的方法就是构造方法。
    另外,发现在这里发一堆代码,压根没人会看。没人纠正我的错误,没人指点我优化代码,也就达不到我的目的,发代码就没有意义了,基本得不到什么帮助。而且论坛老抽筋,老看不到最后的回复,处理速度有点慢。
      

  11.   

    加载图片的代码也有点乱,原因在于不了解Image和ImageIcon是怎么回事。搞清楚上面这些问题,对代码进行了优化精简以后,这个界面设计就告一段落了,下面开始设计登陆后的界面。