在java中分离类。例如,虚拟键盘(带有activelisteners)和另一个从键盘类接收输入的类

在java中分离类。例如,虚拟键盘(带有activelisteners)和另一个从键盘类接收输入的类,java,class,keyboard,Java,Class,Keyboard,我有一个虚拟键盘类,它使用JAVA中的JButtons实现了一个仅限QWERTY字母数字的屏幕键盘。 我在每个按钮上都安装了actionlisteners,这样每当单击按钮时,按钮的标签都会被记录下来 我想做的是,在保持keyboard类独立的同时,我想创建keyboard类的一个实例,以便它接收输入并将其传递回主类,然后在循环中发生。就像使用has.nextLine()不断请求输入一样,我希望能够通过创建屏幕键盘类的实例来实现这一点 我已经编写了keyboard类,它工作得很好,但问题是整数是

我有一个虚拟键盘类,它使用JAVA中的JButtons实现了一个仅限QWERTY字母数字的屏幕键盘。 我在每个按钮上都安装了actionlisteners,这样每当单击按钮时,按钮的标签都会被记录下来

我想做的是,在保持keyboard类独立的同时,我想创建keyboard类的一个实例,以便它接收输入并将其传递回主类,然后在循环中发生。就像使用has.nextLine()不断请求输入一样,我希望能够通过创建屏幕键盘类的实例来实现这一点


我已经编写了keyboard类,它工作得很好,但问题是整数是keyboard类的局部整数,我无法找到一种方法将其带到类之外。

您可以使用observer模式。我不是在这里使用swing,只是为了展示它的工作原理

使键盘类可见

    import java.util.Observable;

    public class Keybaord extends Observable {

        private String keyThatIsPressed;

        public void setKeyThatIsPressed(String keyThatIsPressed) {
            this.keyThatIsPressed = keyThatIsPressed;
            setChanged();
            notifyObservers(keyThatIsPressed);
        }

        public String getKeyThatIsPressed(){
            return keyThatIsPressed;
        }

 }
成为你的主要课堂观察员

import java.util.Observable;
import java.util.Observer;

public class MainClass implements Observer {
    private String keyThatIsPressed;

    @Override
    public void update(Observable observable,
            Object object) {
        if (object instanceof String) {
            this.keyThatIsPressed = (String) object;
            System.out.println("Key that was unlucky enough to get pressed was: "
                    + keyThatIsPressed);
        } 
    }
}

谢谢你对这个问题的精彩回答。我只是想知道,处理我想做的事情的通常做法是什么。我的意思是你通常是如何处理这种问题的。你通常是将类分开还是将它们保存在同一个文件中,这样你就不必使用观察者,等等?当然是分开的。在不必要时使用observer是一种很好的做法。是的,缺点是如果你有太多的观察者,跟踪他们可能会变得很困难,但这种模式确实适合这种松散耦合。我使用seam对这种模式进行了注释,以保持setter更干净。但是,当然,仅仅为了这个目的使用seam是过分的。当然,如果您愿意,您可以开发自己的注释,而不是在setter中插入代码。