当前位置: 代码迷 >> Java相关 >> JOptionPane.showMessageDialog的问题
  详细解决方案

JOptionPane.showMessageDialog的问题

热度:634   发布时间:2007-01-12 21:34:47.0
这个我知道啊  呵呵   还是谢谢楼上的好心提醒。。
至于你那个问题。。。因为用的那个类是我自已建的啊
下面那个SHOWMESSAGE的错误 是因为你的参数不对。。。我上面已经说过了  THIS表示对当前引用此方法的对像的引用  所以是一个BUTTON而不是一个容器。。。
----------------解决方案--------------------------------------------------------

构造的时候,把窗体的引用做为参数传给它


----------------解决方案--------------------------------------------------------

如果想访问f 就在类里面把f定义成静态的就可以了
static MainClass f; //声明
这样传入f应该可以

main()里面再生成对象......


----------------解决方案--------------------------------------------------------

传入null不好嘛??


----------------解决方案--------------------------------------------------------
是啊,传入null也可以啊
----------------解决方案--------------------------------------------------------
呵呵  传入NULL也可以啦   我只想忽然想到这个问题  所以就问下了   多了解点东西不是坏事嘛
----------------解决方案--------------------------------------------------------

你想传入父类的窗体,你可以在构造它的时候,把父类的窗体引用做为构造函数的参数传进来


----------------解决方案--------------------------------------------------------
不能明白版主的意思  如果版主有空就烦请写个eg  没空就算了  也许以后我再遇到的时候领悟到了
----------------解决方案--------------------------------------------------------
以下是引用しΟν∈→魈在2007-1-12 17:04:22的发言:

package 学生管理系统;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MainClass extends JFrame {

public MainClass() {
super("学生管理系统---管理员登陆");
this.init();
}

public void init() {
Container cp = this.getContentPane();
cp.setLayout(null);


JLabel jlabel1 = new JLabel("管理员帐号:");
JLabel jlabel2 = new JLabel("管理员密码:");
JButton jbutton = new JButton("登陆");
final JTextField text = new JTextField(10);
final JPasswordField password = new JPasswordField();
jbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] str =
new DatabaseUtilities().getDataTypes("Admin_info");
if(str[0].equals(text.getText()))
if(str[1].equals(password.getText()))
JOptionPane.showMessageDialog(MainClass.this,"你以管理员"//像你的匿名内部类,可以通过,MainClass.this来获来外部类的引用
+str[0]+"的身份登陆");  //这里有错误,该怎么办。。。意思是不认识F
else
JOptionPane.showMessageDialog(f,"你输入的密码有误");
else
JOptionPane.showMessageDialog(f,"你输入的用户名不存在");
}
});

cp.add(jlabel1);
cp.add(jlabel2);
cp.add(text);
cp.add(password);
cp.add(jbutton);

jlabel1.setBounds(150, 150, 100, 20);
jlabel2.setBounds(150, 200, 100, 20);
text.setBounds(260, 150, 150, 20);
password.setBounds(260, 200, 150, 20);
jbutton.setBounds(220, 270, 90, 40);

this.setSize(new Dimension(600, 400));
this.setLocation(200, 200);
this.show();

this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

/*class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
String SQLCommand = "SELECT * FROM Admin_info";
execute(SQLCommand);
}
}*/

public static void main(String[] args) {
final MainClass f = new MainClass();
}

}

如果你想把事件监听器写成一个单独的有名字的类那么可以通过构造函数的参数来传递父窗体的引用
class MyListener implements ActionListener{
private JFrame who;
public MyListener(JFrame who){
this.who=who;
}
public void actionPerformed(ActionEvent ae){

JOptionPane.showMessageDialog(who,"xxx");
}
}

这样你可以在构造监听器的时候,让它里面的JOptionPane就有父类的JFrame的引用 了


----------------解决方案--------------------------------------------------------
还有一个方法,那就是直接在你的 MainCLass中去implements ActionListener,然后在它的actionPerformed里面就可以直接传入this到JOptionPane.showMessageDialog()里面了
----------------解决方案--------------------------------------------------------