class searchdlg extends JDialog implements ItemListener,ActionListener
{
Button btn2=new Button("取消"); public searchdlg(Frame df)
{
super(df,"查找",true); df.add(btn2);
df.setSize(300,100);
df.setVisible(true);
this.setResizable(false);
                        this.setModal(true);
btn2.addActionListener(this);  }
public void actionPerformed(ActionEvent ae)
{
if(ae.getActionCommand()=="取消")searchdlg.this.dispose();
}
}
我在这个jdialog中点击“取消”却怎么也不能关闭,点击右上角的“关闭”时可以关闭。
怎样才能点取消时也能关闭呢?

解决方案 »

  1.   

    汗,这个程序写得生猛,取消按钮是在Frame上的,对话框是模态的,而且是没有显示出来的一个对话框。多亏没有显示出来,如果出来的话,真的不知道怎样才能点到那个取消按钮。
      

  2.   

    不怪楼上说你,你这程序写得...。
    第一个错,df.add(btn2); 
    df.setSize(300,100); 
    df.setVisible(true); 所有的设置都是针对“所有者”,而不是对话框。按钮都加到“所有者”中了。把df改为this。
    第二个错,ae.getActionCommand()=="取消"编译没有提示吗?改为ae.getActionCommand().equals("取消")。这可以原则错误。
    第三个问题,this.add(btn2); 
    this.setSize(300,100); 
    this.setVisible(true); 
    this.setResizable(false); 
    this.setModal(true); 
    btn2.addActionListener(this);你不觉得逻辑有问题吗?最好是这样:
    btn2.addActionListener(this);   
    df.add(btn2); 
    df.setSize(300,100); 
    this.setResizable(false);
    this.setModal(true); 
    df.setVisible(true); 
    第四个问题,把df.setVisible(true); 放在构造函数里是一个糟糕的想法,把它拿掉。如果要测试,写一个main方法:
    public static void main(String[] args){
        searchdlg   sd=new searchdlg(new javax.swing.JFrame());
        sd.setVisible(true);
    }   
      

  3.   

    可是怎样该才能点取消关闭JDialog呢?