解决方案 »

  1.   

                add(jb0);
                add(jb1);
                add(jL1);
                add(jb0);
                add(jb1);问题在这里,JFrame使用的是Layout(BorderLayout)来布局组件,
    即add(jb1), add(jL1)等都是把组件放到JFrame的Center,而Center位置只有一个,所以显示出来的是最后添加的组件jb1。你需要去看看Swing的Lyaout
      

  2.   

    嗯,是的,去看看布局管理器,JFrame和JPanel都是有默认的管理器!
      

  3.   

    总的来说,你写的这些Swing代码让人惨不忍睹!
    1. JPanel你使用绝对定位,然后却使用Layout的居中显示属性!
    2.没有给JFrame.contentPanel指定Layout类型
    3.JFrame直接add是做什么的你debug过吗/?
    =====================================================
    估计是在校生!
      

  4.   

    楼主加油!起点便能看到你的成功!
    谢谢朗晴大哥的鼓励!!
    package c_port_packageBJTeacher;import java.awt.Font;
    import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.io.DataInputStream;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;public class NoteJFrameUserSysInfo extends JFrame implements ActionListener,WindowListener{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
        JPanel jP1 = new JPanel();
        static String MyworkNum = null;
        static Font fnt = new Font("华文中宋",0,20);
        Font fnt0 = new Font("华文中宋",0,18);
        JLabel jL1 = new JLabel();
        static String[] MyMemIP = new String[Recv.MyJButton0SystempriKey.length];
        static String[] MyCusIP = new String[20000];
        String MySysRole = "";
        String LocalMyFriRole = "";
        String LocalMyFriNum = "";
        MyJButton882  jb0 = null;
        MyJButton882  jb1 = null;
        DataInputStream dips = null;
        String SocketData = null;
        String[] buffer = null;
        String isOurUser = null;
        boolean isUser = false;
        
    NoteJFrameUserSysInfo(String MyFriUID,String MyFriRole,String IP,String MyFriNum){
    this.setTitle("系统信息提示:");
    this.setBounds(new Rectangle(200,590,626,442));
    LocalMyFriNum = MyFriNum;
    LocalMyFriRole = MyFriRole;
    jb0 = new MyJButton882 ("接收文件",0);
    jb1 = new MyJButton882 ("拒绝接收",0);
    jb0.setFont(fnt0);
    jb1.setFont(fnt);

    jb0.setBounds(new Rectangle(688,386,76,18));
    jb1.setBounds(new Rectangle(891,386,76,18));
    jP1.setLayout(null);
    if(MyFriRole.equals("Mem")){
    MySysRole = "教师";
    Recv.MyTeacherIP[Integer.parseInt(MyFriNum)]=IP;
    }else{
    MySysRole = "学生";
    }
    jL1.setText("<html>尊敬的用户!!您好!!您的好友:系统"+MySysRole+MyFriUID+"向您做出传送文件的请求,请您选择是否接收好友的文件:</html>");
    jL1.setFont(fnt);
    jb0.setFont(fnt0);
    jb1.setFont(fnt0);

    setBounds(300,300,770,118);

    jL1.setFont(fnt);
    jP1.add(jb0);
    jP1.add(jb1);
    jP1.add(jL1);
    jP1.add(jb0);
    jP1.add(jb1);
    jb0.setBounds(new Rectangle(50,248,73,32));
    jb1.setBounds(new Rectangle(251,248,200,32));
    jb1.setOpaque(false);
    jb0.setOpaque(false);
    jL1.setOpaque(false);
    jb0.addActionListener(this);
    jb1.addActionListener(this);
    this.add(jP1);
    this.setVisible(true);
            
    }

    public static void main(String[] args){
    new NoteJFrameUserSysInfo("褚彦明","Mem","127.0.0.1","2");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if(e.getSource()==jb0){
    SocketClient so = new SocketClient(Recv.S_PORT_SERVER,8811);
                String str = "5丗"+"Mem"+"丠"+Recv.MySystemserialnum+"丮"+"22"+"丠"+LocalMyFriRole+"丠"+LocalMyFriNum+"丗"+"C"+"丗"+"Mem"+"丗"+Recv.MySystemserialnum;
                so.writeStr(str, "NoteJFrameUserSysInfo");
                String MyFriUID = GetMyUserUID.GetMyUserID(Integer.parseInt(LocalMyFriNum), LocalMyFriRole, Recv.MyServerPlace);
                new TcpReceive("Mem",String.valueOf(Recv.MySystemserialnum),LocalMyFriRole,LocalMyFriNum,MyFriUID);
    }if(e.getSource()==jb1){
    SocketClient so = new SocketClient(Recv.S_PORT_SERVER,8811);
                String str = "5丗"+"Mem"+"丠"+Recv.MySystemserialnum+"丮"+"20"+"丠"+LocalMyFriRole+"丠"+LocalMyFriNum+"丗"+"C"+"丗"+"Mem"+"丗"+Recv.MySystemserialnum;
                so.writeStr(str, "NoteJFrameUserSysInfo");
    }
    } @Override
    public void windowActivated(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowClosed(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowClosing(WindowEvent arg0) {
    // TODO Auto-generated method stub
    this.dispose();
    } @Override
    public void windowDeactivated(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowDeiconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowIconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowOpened(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } }
        经过初步的修改,上面代码我得到的运行效果如下:
        
        希望得到CSDN中的达人的点拨:
        我的代码,什么地方出现的问题?
        如何修改?
      

  5.   

    我想问你JFrame直接add是做什么的?
      

  6.   

        fearlessMore大哥,直接在JFrame窗口上add();他的作用应该是:
        添加组件到这个JFrame实例上.
        的功能吧.
        我将所有的组件,添加到了JPanel这个类的对象的上面.
        并且,将JPanel最后,添加到JFrame之上.
        应该没有问题的吧?
        为什么会有:
        无法得到我的代码预期效果的结果呢?
        希望得到fearlessMore大哥的点拨!!
        
      

  7.   

    一看居然还在,实在不忍心,帮你改了一下!希望你看一下注释!
    package com.assignment;import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.io.DataInputStream;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;public class NoteJFrameUserSysInfo extends JFrame implements ActionListener,WindowListener{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
        
        static String MyworkNum = null;
        static Font fnt = new Font("华文中宋",0,20);
        Font fnt0 = new Font("华文中宋",0,18);
        JLabel jL1 = new JLabel();
    //    static String[] MyMemIP = new String[Recv.MyJButton0SystempriKey.length];
    //    static String[] MyCusIP = new String[20000];
        String MySysRole = "";
        String LocalMyFriRole = "";
        String LocalMyFriNum = "";
        JButton  jb0 = null;
        JButton  jb1 = null;
        DataInputStream dips = null;
        String SocketData = null;
        String[] buffer = null;
        String isOurUser = null;
        boolean isUser = false;
        
    NoteJFrameUserSysInfo(String MyFriUID,String MyFriRole,String IP,String MyFriNum){
    this.setTitle("系统信息提示:");
    // this.setBounds(new Rectangle(200,590,626,442)); never do like this
    LocalMyFriNum = MyFriNum;
    LocalMyFriRole = MyFriRole;
    jb0 = new JButton("接收文件");
    jb1 = new JButton("拒绝接收");
    jb0.setFont(fnt0);
    jb1.setFont(fnt);

    //jb0.setBounds(new Rectangle(688,386,76,18));
    //jb1.setBounds(new Rectangle(891,386,76,18));
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout()); //?? why, you are going to user absolute layout
    if(MyFriRole.equals("Mem")){
    MySysRole = "教师";
    // Recv.MyTeacherIP[Integer.parseInt(MyFriNum)]=IP;
    }else{
    MySysRole = "学生";
    }
    jL1.setText("<html>尊敬的用户!!您好!!您的好友:系统"+MySysRole+MyFriUID+"向您做出传送文件的请求,请您选择是否接收好友的文件:</html>");
    jL1.setFont(fnt);
    jb0.setFont(fnt0);
    jb1.setFont(fnt0);

    // setBounds(300,300,770,118);

    jL1.setFont(fnt);
    // panel.add(jb0);
    // panel.add(jb1);
    panel.add(jL1, BorderLayout.CENTER);
    // panel.add(jb0); // why do twice//????
    // panel.add(jb1);
    JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    btnPanel.add(jb0);
    btnPanel.add(jb1);
    panel.add(btnPanel, BorderLayout.SOUTH);
    // jb0.setBounds(new Rectangle(50,248,73,32));
    // jb1.setBounds(new Rectangle(251,248,200,32));
    jb1.setOpaque(false);
    jb0.setOpaque(false);
    jL1.setOpaque(false);
    jb0.addActionListener(this);
    jb1.addActionListener(this);
    this.add(panel);
    this.pack();
    this.setVisible(true);
            
    }

    public static void main(String[] args){
    new NoteJFrameUserSysInfo("褚彦明","Mem","127.0.0.1","2");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    // if(e.getSource()==jb0){
    // SocketClient so = new SocketClient(Recv.S_PORT_SERVER,8811);
    //            String str = "5丗"+"Mem"+"丠"+Recv.MySystemserialnum+"丮"+"22"+"丠"+LocalMyFriRole+"丠"+LocalMyFriNum+"丗"+"C"+"丗"+"Mem"+"丗"+Recv.MySystemserialnum;
    //            so.writeStr(str, "NoteJFrameUserSysInfo");
    //            String MyFriUID = GetMyUserUID.GetMyUserID(Integer.parseInt(LocalMyFriNum), LocalMyFriRole, Recv.MyServerPlace);
    //            new TcpReceive("Mem",String.valueOf(Recv.MySystemserialnum),LocalMyFriRole,LocalMyFriNum,MyFriUID);
    // }if(e.getSource()==jb1){
    // SocketClient so = new SocketClient(Recv.S_PORT_SERVER,8811);
    //            String str = "5丗"+"Mem"+"丠"+Recv.MySystemserialnum+"丮"+"20"+"丠"+LocalMyFriRole+"丠"+LocalMyFriNum+"丗"+"C"+"丗"+"Mem"+"丗"+Recv.MySystemserialnum;
    //            so.writeStr(str, "NoteJFrameUserSysInfo");
    // }
    } @Override
    public void windowActivated(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowClosed(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowClosing(WindowEvent arg0) {
    // TODO Auto-generated method stub
    this.dispose();
    } @Override
    public void windowDeactivated(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowDeiconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowIconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } @Override
    public void windowOpened(WindowEvent arg0) {
    // TODO Auto-generated method stub

    } }
      

  8.   

    组件中的add方法,有一种是有两个参数的add(Component c,int align)一个参数是组件,一个是布局位置。JFrame默认布局是BorderLayout型的,默认添加的组件是放在中间的;JPanel默认布局是FlowLayout型的,默认好像也是放在中间。把你那些个add方法修改一下就行。
      

  9.   

    谢谢诸位高手的相助!!
        gloomyfish,说实话,您的技术很漂亮.
        但是,您应该学习一下郎晴大哥的“仁义”:
        光武艺高强不行,要服人,还要有“武德”.
        欧阳锋的武艺高强,但是:是一个魔头.
        郭靖在初踏江湖的时候,是一个“小字辈”的.智商又不高.
        但是,走到哪里,都是一颗“耀眼的螺丝钉”.
        拿爸爸的话来说就是:高数题目都会做,洗个碗,穿个衣戴个帽,有什么难度!!
        “不要输在小事上”.
        感谢郎晴大哥的鼓励与gloomyfish哥的相助!!
        和aaaaaqiwang,fearlessmore的提示.
        最后,附上一曲歌词:
        霍元甲歌词周杰伦 - 霍元甲
    吓 命有几回合 擂台等着 
    生死状 赢了什么 冷笑着 
    天下谁的 第一又如何 
    止干戈 我辈尚武德 
    我的 拳脚了得
    却奈何 徒增虚名一个 
    江湖难测 谁是强者
    谁争一统武林的资格 
    小城里岁月流过去
    清澈的勇气
    洗涤过的回忆 
    我记得你 骄傲的活下去 
    霍霍 霍霍霍 霍霍霍
    霍家拳的套路招式灵活 
    我我 我我我 我我我
    活着生命就该完整渡过 
    我我 我我我 我我我
    过错软弱从来不属于我 
    霍霍 霍霍霍 霍霍霍
    我们精武出手无人能躲
    吓 命有几回合 擂台等着 
    生死状 赢了什么 冷笑着 
    天下谁的 第一又如何 
    止干戈 我辈尚武德 
    我的 拳脚了得
    却奈何 徒增虚名一个 
    江湖难测 谁是强者
    谁争一统武林的资格 
    小城里岁月流过去
    清澈的勇气
    洗涤过的回忆 
    我记得你 骄傲的活下去 
    霍霍 霍霍霍 霍霍霍
    霍家拳的套路招式灵活 
    我我 我我我 我我我
    活着生命就该完整渡过 
    我我 我我我 我我我
    过错软弱从来不属于我 
    霍霍 霍霍霍 霍霍霍
    我们精武出手无人能躲
    霍霍 霍霍霍 霍霍霍
    霍家拳的套路招式灵活 
    我我 我我我 我我我
    活着生命就该完整渡过 
    我我 我我我 我我我
    过错软弱从来不属于我 
    霍霍 霍霍霍 霍霍霍
    我们精武出手无人能躲
    小城里岁月流过去
    清澈的勇气
    洗涤过的回忆 
    我记得你 骄傲的活下去分数我发出了.