所以我试图使我的程序更有条理。为此,我在文件中包含我的方法,另一个包含事件侦听器和变量。第二个文件需要使用第一个文件中的方法来更改变量等。第一个需要使用第二个中的变量才能正常运行。基本上:
public class Controls extends javax.swing.Jfarme{
int turns = 0;
int stuff = btnSet(jButton1);
}
public class GamePlay{
public int btnSet(javax.swing.JButton btn){
//do stuff using turn
turn++;
}
}
这有意义吗?我怎么让这两个分享?
编辑:我想要两个类,以使其更好地组织。我制作了TicTacToe,然后是TicTacTwo,现在是TicTacCube。简直有点混乱(我现在有243个JButton可以跟踪)。我只是想将我的方法与正在执行的代码分开,以使其美观。
答案 0 :(得分:1)
免责声明:当然,有很多方法可以设计应用程序的类体系结构,因此以下只是一种方法(但不是最差的一种)。
我的印象是您尚未采用面向对象设计和编程的概念。
如果您向其他人描述(游戏?)应用程序,那么您肯定会使用很多名词和动词。经验法则是使类别脱离名词,使方法脱离动词。我猜想“ Controls”(尤其是复数形式)和“ GamePlay”一词在您的描述中不会是最突出的,所以不要从这里开始。取而代之的是,我希望名词像“ Player”,“ Board”或“ Figure”,以及动词像“ move”,“ collect”,“ shoot”或您所玩的游戏。对于成为方法的动词,您必须确定它们属于哪一类,并且主要通过回答问题是谁或句子的主语来做到这一点,例如move()
应该成为Figure
的一种方法,因为它不是棋盘或玩家在移动,而是棋盘上的人物。
在进一步设计类时,应专注于实体的内部工作原理(“业务逻辑”),而不是用户界面-应将其保留在不同的类中。
因此,这样一个应用程序的体面设计可能带有一个GamePlay
类和该应用程序的顶级工作流,但是GamePlay
不应具有任何用户界面(javax.swing。* )中的元素。用户界面(也许类似于您的Controls
类)应该仅通过调用其某些方法而不是通过读取字段来与GamePlay
及其同伴进行通信。
P.S。关于StackOverflow上的问题:最好将实际代码的一部分复制到问题中,因此避免使用像Jfarme
这样的错字而不是JFrame
。
答案 1 :(得分:0)
据我所知,实际上有两种方法可以做到:静态或使用对象(毕竟Java是一种面向对象的语言)
静态方法有效地意味着所有变量和方法都属于 classes 本身。这将需要将关键字static
放在Controls类中的所有变量和GamePlay类中的所有方法之前。然后ClassName.variable
或ClassName.method()
,例如Controls.turns
或GamePlay.btnSet(btn)
这种方法意味着将创建类的新 instances ,每个类都具有自己的实例变量和方法,可以使用instance_name.variable
或instance_name.method()
对其进行访问。这将涉及创建类的实例,例如Controls controls_instance = new Controls()
或GamePlay gameplay_instance = new GamePlay()
,然后引用其属性,例如controls_instance.turns
或gameplay_instance.setBtn(btn)
答案 2 :(得分:0)
要使用btnset()
类中的Controls
函数,请将GamePlay
类导入Controls
类,然后实例化GamePlay
类对象访问其btnset()
函数。
例如GamePlay gameplay = new GamePlay();
gameplay.btnset();
要在turns
类中使用GamePlay
变量,请将Controls
类导入GamePlay
类,然后实例化Controls
类对象访问其turns
变量。
例如
Controls controls = new Controls();
controls.turns++;
或者,您可以将方法或变量设置为静态,因此无需首先实例化对象。如果方法/变量是静态的,则可以调用GamePlay.btnset();
或Controls.turns++;