Java上的取消按钮

Java上的取消按钮,java,swing,mouseevent,cancel-button,Java,Swing,Mouseevent,Cancel Button,所以我试着制作一个java小程序,我试着制作一个取消按钮,当它被点击时,它退出。我总是在它说的地方出错 找不到符号-类MyMouseListener2 按钮1.添加MouseListener(新的MyMouseListener2()) 这是我的密码: import java.awt.*; import java.awt.event.*; public class registrations{ Button button1; Button button2; TextField objTextFi

所以我试着制作一个java小程序,我试着制作一个取消按钮,当它被点击时,它退出。我总是在它说的地方出错

找不到符号-类MyMouseListener2
按钮1.添加MouseListener(新的MyMouseListener2())

这是我的密码:

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

public class registrations{
Button button1;
Button button2;
TextField objTextField1;
TextField objTextField2;
TextField objTextField3;
TextField objTextField4;
TextField objTextField5;   
Label label1;
Label label2;
Label label3;
Label label4;
Label label5;
Label label6;

public static void main (String args[]){
registrations r = new registrations();
}
public registrations() {
Frame f = new Frame ("Sum of Numbers");
Button button1 = new Button("Ok");
button1.setBounds(30,305,150,75);
button1.addMouseListener(new MyMouseListener1());
Button button2 = new Button("Cancel");
button2.setBounds(230,305,150,75);
button1.addMouseListener(new MyMouseListener2());
f.add(button1);
f.add(button2);

label1 = new Label("First Number: ");
label1.setBounds(20,75,100,25);
f.add(label1);

label2 = new Label("Last Name: ");
label2.setBounds(20,115,100,25);
f.add(label2);

label3 = new Label("Email Address: ");
label3.setBounds(20,155,100,25);
f.add(label3);

label4 = new Label("Username: ");
label4.setBounds(20,195,100,25);
f.add(label4);

label5= new Label("Password: ");
label5.setBounds(20,235,100,25);
f.add(label5);

label6 = new Label();

objTextField1 = new TextField("", 15);
objTextField1.setBounds(140,75,75,25);
objTextField2 = new TextField("",0);
objTextField2.setBounds(140,115,75,25);
objTextField3 = new TextField("",0);
objTextField3.setBounds(140,155,75,25);
objTextField4 = new TextField("",0);
objTextField4.setBounds(140,195,75,25);
objTextField5 = new TextField("",0);
objTextField5.setBounds(140,235,75,25);

f.add(label6);

f.add(label1);
f.add(label2);
f.add(label3);
f.add(label4);
f.add(label5);
f.add(objTextField1);
f.add(objTextField2);
f.add(objTextField3);
f.add(objTextField4);
f.add(objTextField5);
f.add(label6);

f.addWindowListener(new WindowAdapter()
{
    public class MyMouseListener2 extends MouseAdapter{
        public void mouseClicked(MouseEvent m){
            System.exit(0);
        }
    }  
});
f.setSize(400,400);
f.setVisible(true);
}
    public class MyMouseListener1 extends MouseAdapter{
        public void mouseClicked(MouseEvent me){
            label6.setText("Thank you for registering!");
        }
    }
}
我不知道我做错了什么,你能帮帮我吗?

关于你的问题。。。 您正在尝试在匿名类中创建一个类

f.addWindowListener(new WindowAdapter() {
    public class MyMouseListener2 extends MouseAdapter {

        public void mouseClicked(MouseEvent m) {
            System.exit(0);
        }
    }
});
这是行不通的,除此之外,您完全忽略了
WindowAdapter
。这意味着(即使它确实起作用),
MyMouseListener2
只能从
匿名
窗口适配器的上下文中访问

为了解决这个问题。。。 不要对按钮使用
MouseListener
,它不会考虑如果用户在按钮聚焦时按Enter键会发生什么情况,相反,您希望向按钮添加
ActionListener

button1.addMouseListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        System.exit(0);
    }
});
这将同时考虑鼠标点击和键盘事件(以及在按钮上调用
doClick

摆脱
WindowAdapter
中的
MyMouseListener2
,它毫无意义,而且根本不会编译(是的,有很多方法可以让它工作,但这样做没有意义,所以你最好还是把它去掉)

如果愿意,还可以创建一个从
ActionListener
扩展而来的类,并使用该类的实例,或者可以利用
Action
s API

使用
Action
s API,您可以做一些有趣的事情,比如使用注册转义来触发相同的操作,并将相同的操作作为菜单栏上的
JMenuItem

仔细看看


有关更多详细信息,请参见侦听器中定义的MyMouseListener1和MyMouseListener2。它们在代码块外部不可见

这是您的代码修复:

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

public class registrations{
Button button1;
Button button2;
TextField objTextField1;
TextField objTextField2;
TextField objTextField3;
TextField objTextField4;
TextField objTextField5;   
Label label1;
Label label2;
Label label3;
Label label4;
Label label5;
Label label6;

private MouseAdapter mouseListener;

public static void main (String args[]){
registrations r = new registrations();
}
public registrations() {
    mouseListener = new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            super.mouseClicked(e);
            System.out.println("clicked");
        }
    };
Frame f = new Frame ("Sum of Numbers");
Button button1 = new Button("Ok");
button1.setBounds(30,305,150,75);
button1.addMouseListener(new MyMouseListener1());
Button button2 = new Button("Cancel");
button2.setBounds(230,305,150,75);
button1.addMouseListener(mouseListener);
f.add(button1);
f.add(button2);

label1 = new Label("First Number: ");
label1.setBounds(20,75,100,25);
f.add(label1);

label2 = new Label("Last Name: ");
label2.setBounds(20,115,100,25);
f.add(label2);

label3 = new Label("Email Address: ");
label3.setBounds(20,155,100,25);
f.add(label3);

label4 = new Label("Username: ");
label4.setBounds(20,195,100,25);
f.add(label4);

label5= new Label("Password: ");
label5.setBounds(20,235,100,25);
f.add(label5);

label6 = new Label();

objTextField1 = new TextField("", 15);
objTextField1.setBounds(140,75,75,25);
objTextField2 = new TextField("",0);
objTextField2.setBounds(140,115,75,25);
objTextField3 = new TextField("",0);
objTextField3.setBounds(140,155,75,25);
objTextField4 = new TextField("",0);
objTextField4.setBounds(140,195,75,25);
objTextField5 = new TextField("",0);
objTextField5.setBounds(140,235,75,25);

f.add(label6);

f.add(label1);
f.add(label2);
f.add(label3);
f.add(label4);
f.add(label5);
f.add(objTextField1);
f.add(objTextField2);
f.add(objTextField3);
f.add(objTextField4);
f.add(objTextField5);
f.add(label6);

f.addWindowListener(new WindowAdapter()
{
    final class MyMouseListener2 extends MouseAdapter{
        public void mouseClicked(MouseEvent m){
            System.exit(0);
        }
    }  
});
f.setSize(400,400);
f.setVisible(true);
}
    final class MyMouseListener1 extends MouseAdapter{
        public void mouseClicked(MouseEvent me){
            label6.setText("Thank you for registering!");
        }
    }
}
1) 使用逻辑一致的代码格式样式!代码缩进旨在帮助人们遵循程序流程。2) Swing GUI可能必须在不同的平台上工作,使用不同的PLAF、不同的屏幕大小和分辨率以及不同的默认字体大小设置。因此,它们不利于组件的精确放置。而是使用布局管理器,或者也可以使用空白。。。3) 为什么使用AWT组件而不是Swing?请参阅,了解放弃AWT的许多好理由。