借楼主楼问个问题 final JFrame frame = this; 这为什么要用final .?
this 自身引用,是你正在编辑的那个类的一个实例new JFrame() 通过无参构造函数创建实例他们是两个实例,即便他们初值一样,也不是同一个实例。值可以相等,但代表了不同的实例,明白吗?呵呵好像说的复杂了,这个可是THINKING IN JAVA 说的 举个例子说,这里有两个长的一样的苹果a、b,你能说苹果a是b吗?不能。当a被咬了一口,它还和b一样吗?因为他们本来就是两个东西(实例),不管他们相同与否,也要区别开来对待慢慢理解吧~~~~^_^刚开始搞不懂这个很正常,你只要分清他们可能因为初始化不同,而造成值的不同;对它们操作的时候分清是对谁,苹果a还是苹果b。再深入的理解,就要靠多学多练了,用的多了自然体会到当中的不同。要说明的是,JAVA中不提倡用this进行赋值,而是在不得不用的时候通过this引用,这样做就是为了防止搞混。
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,再把里面内容改改,应该也可以吧!
至于说一样与否~~呵呵,指向的是不同的对象啊
this.setSize(300,200);
this.setTitle("显示登陆对话框");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
你这么多this干嘛这么用呢
final JFrame frame = this; 这为什么要用final .?
举个例子说,这里有两个长的一样的苹果a、b,你能说苹果a是b吗?不能。当a被咬了一口,它还和b一样吗?因为他们本来就是两个东西(实例),不管他们相同与否,也要区别开来对待慢慢理解吧~~~~^_^刚开始搞不懂这个很正常,你只要分清他们可能因为初始化不同,而造成值的不同;对它们操作的时候分清是对谁,苹果a还是苹果b。再深入的理解,就要靠多学多练了,用的多了自然体会到当中的不同。要说明的是,JAVA中不提倡用this进行赋值,而是在不得不用的时候通过this引用,这样做就是为了防止搞混。