0

我试图实现 GoF 的一些构造设计模式,其中之一是“原型”。我的想法是创建一个用户界面(一个带有按钮和标签的框架),我可以使用原型来克隆一个按钮,因为我的程序是一个记忆游戏(关于马里奥兄弟:D)所有这些都在 JAVA 上。我也想实现我自己的克隆方法。

我认为我需要做的是制作一个按钮,当您克隆它时,您只需更改按钮的名称(可能还有按钮显示的图像)。

首先,我有一个名为Prototype克隆的类:

import javax.swing.JButton;

public interface Prototype 
{
    //Method to make a clone
    public Prototype makeClone();

    public JButton getButtonName();
    public void setButtonName(String elDato);

}//end interface Prototype

然后,我ConcretePrototypeButton要实现接口Prototype并使用它的克隆方法。

import javax.swing.JButton;

    public class ConcretePrototypeButton implements Prototype{
        private String aData;
        static JButton aButton;
        //--------

        public Prototype makeClone(){
            Prototype aClone;
            //---------------
            aClone = new ConcretePrototypeButton();
            aClone.setNombreBoton(this.aData);
            return aClone;
        }//end makeClone


        public String getButtonName()
        {
            return aData;
        }//end getNombreBoton

        public void setButtonName(String aData) {

            Object theName =new String(aData);
            theName=theName.toString();
            //------------

            this.aData=(JButton)theName;
        }//end setButtonName method

    }//end class ConcretePrototypeButton

但是javagetButtonName在这一行的方法中向我展示了一个问题:

return aData;

最后我有一个名为UserInterface我的客户的第三个班级,但我不能有一个main,因为我main在另一个完成我的程序的班级。

import javax.swing.*;

public class Interfaz {

    Prototype aButton;
    Prototype buttonOne;
    Prototype buttonTwo;
    //-------------------

    aButton = new ConcretePrototypeButton();
    aButton.setButtonName("buttonOne");
    //We make a clone
    buttonOne = aButton.makeClone();

    aButton.setButtonName("buttonTwo");
    //We make another clone
    buttontwo = aButton.makeClone();

    //and continue creating buttons to reach 16 buttons.
}//end clase Interfaz

但是我做错了什么,我知道这是什么,在这堂课上告诉我这一行的错误:

Prototype buttonTwo;

在这方面:

}//end clase Interfaz

这个想法是有这样的东西:http: //imageshack.us/photo/my-images/855/te7q.png/ (如果你看不到图像,请告诉我)。

如果有人可以帮助我,我会很感激。提前致谢。

附加说明:当我将方法从 JButton 返回的内容更改为 String java 时,我向我发送了另一个错误: - 实现 Prototype.getNombreBoton - 返回类型与:Prototype.getNombreBoton 不兼容

如果我也改变它。我如何声明这些类的目标是制作“按钮”的对象?

4

2 回答 2

0

首先

原型按钮二;

和 buttontwo = aButton.makeClone();

两者都不一样应该是buttonTwo

返回 aData;

您正在返回 String 代替 JButton 并在此方法中

公共无效setButtonName(字符串aData){

    String theName;
    //------------
    theName = (String) aData;
    aData = theName;
}

这里的 aData 是指这个方法的局部变量,它是 setButtonName( String aData ) 也代替 aData = theName; 你应该使用 this.aData = theName; 当我们将字符串分配给 JButton 时,这也会产生错误。所以你可能想这样写你的方法来工作

公共无效setButtonName(字符串aData){

       Object theName=new String(aData);
       theName=theName.toString();
        //------------
        this.aData=(JButton)theName;

    }

这是根据您在此处提供的代码,我不知道您的要求正是您想要制作的。试试这个可能有效。

于 2013-10-07T13:39:46.437 回答
0

但是java在这一行的getButtonName方法中向我展示了一个问题:

返回一个数据;

aData 被声明为字符串

getButtonName 返回一个 JButton

似乎您已经改变了对这种方法应该做什么的想法,但没有完全遵循它的结论。

于 2013-10-07T13:04:50.410 回答