Java上的取消按钮
所以我试着制作一个java小程序,我试着制作一个取消按钮,当它被点击时,它退出。我总是在它说的地方出错 找不到符号-类MyMouseListener2Java上的取消按钮,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
按钮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的许多好理由。