Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java basic GUI程序错误_Java_User Interface - Fatal编程技术网

Java basic GUI程序错误

Java basic GUI程序错误,java,user-interface,Java,User Interface,在我的在线Java类中,我需要编写一个程序,计算一帧内鼠标单击按钮的次数。这是我的密码: import java.awt.*; import java.awt.event.*; public class option1 extends Frame { option1() { setTitle("Final Project Option 1"); setSize(300,300); show(); } public stat

在我的在线Java类中,我需要编写一个程序,计算一帧内鼠标单击按钮的次数。这是我的密码:

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

public class option1 extends Frame {
    option1() {
        setTitle("Final Project Option 1");
        setSize(300,300);
        show();
    }
    public static void main(String[] args) {
        option1 test = new option1();

        int a = 0;
        String s1 = "" + a;

        Frame objFrame;
        Button objButton1;
        Label objLabel1;

        objFrame = new option1();
        objButton1 = new Button("Button");
        objLabel1 = new Label();

        objLabel1.setBounds(150,220,50,30);
        objButton1.setBounds(40,35,50,50);

        objLabel1.setText(s1);

        objButton1.addMouseListener(new MyMouseListener()); //line 29

        objFrame.add(objLabel1);
        objFrame.add(objButton1);
    }
    public class MyMouseListener extends MouseAdapter {
        public void mouseClicked(MouseEvent me) {
            a++; //line 36
        }
    }
}
编译时,我得到两个错误。一个错误出现在第29行,这是“非静态变量,无法从静态上下文引用”,另一个错误出现在第36行,这是“找不到符号”


那么,我到底做错了什么?我希望响应者能准确地告诉我需要做什么来解决问题,并避免使用技术术语,因为我对编程相当陌生。

我看到两个问题,即您的内部类应该是
静态的(要在没有
option1
实例的情况下使用它,它可能应该是
option1
,以符合Java命名约定),并且需要定义和初始化
a

public static class MyMouseListener extends MouseAdapter {
    int a = 0; //<-- add this.
    public void mouseClicked(MouseEvent me) {
        a++; 
    }
}
然后你可以通过
a

MyMouseListener mml = new MyMouseListener();
objButton1.addMouseListener(mml);
System.out.println(mml.a);

最后,您最初的
“”+a
方法将是
“0”

,通常,只要可能,就从
main
方法转到非静态上下文中

public class option1 extends Frame {
    private int a = 0;
    private Label objLabel1;
    option1() {
        setTitle("Final Project Option 1");
        setSize(300,300);


        Button objButton1;

        objButton1 = new Button("Button");
        objLabel1 = new Label();

        objLabel1.setBounds(150,220,50,30);
        objButton1.setBounds(40,35,50,50);

        objLabel1.setText(Integer.toString(a));

        objButton1.addMouseListener(new MyMouseListener()); //line 29

        add(objLabel1);
        add(objButton1);

        show();
    }
    public static void main(String[] args) {
        option1 test = new option1();
    }
    public class MyMouseListener extends MouseAdapter {
        public void mouseClicked(MouseEvent me) {
            a++; //line 36
            objLabel1.setText(Integer.toString(a));
        }
    }
}
  • 一般来说,AWT已经过时(大约15年了),您确实应该尝试使用Swing或JavaFX
  • 按钮应使用
    ActionListener
    ,因为鼠标不是触发按钮的唯一方式
  • 您可能希望有一个通读版本,这将使人们更容易阅读您的代码,您也更容易阅读其他代码

我只是想让你的代码工作。但是关于标准java编码有一些问题。但是你应该考虑以前关于编码风格的答案。

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class Main {

public static void main(String[] args) {

    final Frame mainFrame = new OptionOne();
    Button button = new Button("Button");
    final Label label = new Label();

    label.setBounds(150, 220, 50, 30);
    label.setText("0");
    button.setBounds(40, 35, 50, 50);

    label.addPropertyChangeListener(label.getText(), new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            mainFrame.addNotify();
        }
    });

    button.addMouseListener(new MouseListener() {
        @Override
        public void mouseClicked(MouseEvent e) {
            int value = Integer.parseInt(label.getText());
            label.setText(String.valueOf(value + 1));
        }

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseReleased(MouseEvent e) {

        }

        @Override
        public void mouseEntered(MouseEvent e) {

        }

        @Override
        public void mouseExited(MouseEvent e) {

        }
    });

    mainFrame.add(label);
    mainFrame.add(button);
 }
}

class OptionOne extends Frame {

   OptionOne() {
    setTitle("Final Project Option 1");
    setSize(300, 300);
    show();
   }
}

我想你最好先看看Java语言的基础知识,然后特别是这个和这个,我尝试了那个,使内部类是静态的,并将“int a=0”移到内部类下面。但是现在我在编译时遇到了一个不同的错误:“String s1=”“+a;”我得到一个错误“找不到符号”.@RANDOMGY537已编辑。显然,
a
是侦听器的一部分;您应该阅读变量范围。
MyMouseListener
没有
a
。当这样编写代码时(导入行在开头),我在编译时仍然有一(1)个“找不到符号”错误。它在
objLabel1.setText行中(整数.toString(a))
在代码末尾。@ElliottFrisch它不需要它,
MyMouseListener
不是一个静态的内部类,它是一个实例内部类,可以使用
选项1中的
a
以及label@randomguy537请参见我如何创建
objLable1
和实例字段,而不是在co中删除它构造函数作为局部变量…为什么要在标签的每个PropertyChange事件上调用addNotify?您应该需要调用addNotify…当然,没有必要。谢谢@MadProgrammer