JFrame frame = this;和JFrame frame = new JFrame();这两个是一样的吗?
还有为什么可以用this去初始化frame呢?不明白

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class LoginDialogDemo extends JFrame
    {
    JButton button = new JButton("请点击");
    JPanel panel = new JPanel(new FlowLayout());
    public LoginDialogDemo()
    {
    final JFrame frame = this;                            //<<<--------------------------
    this.getContentPane().add(panel,BorderLayout.SOUTH);
    panel.add(button);
    button.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    showLoginDialog(frame);
    }
    });
    this.setSize(300,200);
    this.setTitle("显示登陆对话框");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    }

    void showLoginDialog(JFrame frame)
    {
    JPanel p = new JPanel(new GridLayout(0,1));
    JTextField tfUserName = new JTextField();
    JPasswordField tfPassword = new JPasswordField();
    p.add(new JLabel("UserName: "));
    p.add(tfUserName);
    p.add(new JLabel("Password: "));
    p.add(tfPassword);
    //JOptionPane.showConfirmDialog()显示一个确认信息面板
    //showConfirmDialog()询问一个确认问题,JOptionPane.YES_NO_OPTION,JOptionPane.PLAIN_MESSAGE是未使用图标
    if(JOptionPane.showConfirmDialog(frame,p,"Login",JOptionPane.YES_NO_OPTION/*JOptionPane.PLAIN_MESSAGE*/)
    == JOptionPane.OK_OPTION)//选择OK时,从类方法返回
    {
    System.out.println("User Name:" + tfUserName.getText());
    System.out.println("Password:" + new String(tfPassword.getPassword()));
    }
    }
    public static void main(String []args)
    {
    LoginDialogDemo frame = new LoginDialogDemo();
    }
    }我把 JFrame frame = this;改为 JFrame frame = new JFrame();后,出来的Login对话框的位置就不同了,为什么啊!还有void showLoginDialog(JFrame frame)里面 一定要放JFrame frame吗?如果我放一个JPanel panel,再把里面内容改改,应该也可以吧!
      

  2.   

    你要明白this指得是什么。就是这个类一个实例自身。如果这个类正是继承JFrame ,那么将这个对象赋给一个指向JFrame类型的引用,有什么不可以呢?
    至于说一样与否~~呵呵,指向的是不同的对象啊
      

  3.   

    去看看java2入门经典的关于this介绍。找其他资料也行。
      

  4.   

    当然不一样了  new JFrame()是初始化了一个jframe  而用this赋值的对象是当前类LoginDialogDemo 
    this.setSize(300,200); 
    this.setTitle("显示登陆对话框"); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setVisible(true); 
    你这么多this干嘛这么用呢
      

  5.   

    我也不明白,但用this 传递的窗口 位置和 主窗口一样,用new 的窗口位置不同原理不懂,但this 是本类,new 等同与新开辟了一个空间 ...等待 高手回答,不懂这个
      

  6.   

    借楼主楼问个问题 
    final JFrame frame = this;     这为什么要用final .?
      

  7.   

    this   自身引用,是你正在编辑的那个类的一个实例new JFrame()    通过无参构造函数创建实例他们是两个实例,即便他们初值一样,也不是同一个实例。值可以相等,但代表了不同的实例,明白吗?呵呵好像说的复杂了,这个可是THINKING IN JAVA 说的
    举个例子说,这里有两个长的一样的苹果a、b,你能说苹果a是b吗?不能。当a被咬了一口,它还和b一样吗?因为他们本来就是两个东西(实例),不管他们相同与否,也要区别开来对待慢慢理解吧~~~~^_^刚开始搞不懂这个很正常,你只要分清他们可能因为初始化不同,而造成值的不同;对它们操作的时候分清是对谁,苹果a还是苹果b。再深入的理解,就要靠多学多练了,用的多了自然体会到当中的不同。要说明的是,JAVA中不提倡用this进行赋值,而是在不得不用的时候通过this引用,这样做就是为了防止搞混。