【问题标题】:How do i use a gui i build together with functions from somewhere else?我如何使用我与其他地方的功能一起构建的 gui?
【发布时间】:2012-07-07 14:22:22
【问题描述】:

你好,我是新来的,我正在制作一个小游戏,我制作了一个 gui,如下所示:

public static void main(String[] args) {

    Frame frame1 =new Frame("TickTacToe");
    frame1.setLayout(null);
    frame1.setBounds(250,150,500,500);
    frame1.setVisible(true);
    frame1.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
    });

    final Button button11 = new Button("");
    button11.addActionListener(null);

    final Button button12 = new Button("");
    button11.addActionListener(null);

    final Button button13 = new Button("");
    button11.addActionListener(null);

    final Button button21 = new Button("");
    button11.addActionListener(null);

    final Button button22 = new Button("");
    button11.addActionListener(null);

    final Button button23 = new Button("");
    button11.addActionListener(null);

    final Button button31 = new Button("");
    button11.addActionListener(null);

    final Button button32 = new Button("");
    button11.addActionListener(null);

    final Button button33 = new Button("");
    button11.addActionListener(null);


    button11.setBounds(100, 100, 80, 70);
    button12.setBounds(100, 200, 80, 70);
    button13.setBounds(100, 300, 80, 70);
    button21.setBounds(200, 100, 80, 70);
    button22.setBounds(200, 200, 80, 70);
    button23.setBounds(200, 300, 80, 70);
    button31.setBounds(300, 100, 80, 70);
    button32.setBounds(300, 200, 80, 70);
    button33.setBounds(300, 300, 80, 70);

    frame1.add(button11); 
    frame1.add(button12); 
    frame1.add(button13); 
    frame1.add(button21); 
    frame1.add(button22); 
    frame1.add(button23); 
    frame1.add(button31); 
    frame1.add(button32);
    frame1.add(button33); 
}

我想向按钮添加动作侦听器,但最好不要在这个 void 中添加一个不同的类,这样我就可以创建一种方法来运行函数循环,例如玩家轮换器,如果它是第一个,它将设置按钮文本到 x 和 o 如果它是 othe 我或多或少知道我需要使用的代码,但我想不出一种方法来使用 anzwhere 的 gui,而不是它自己的 void。我不太清楚我在寻找什么,所以非常感谢任何帮助。

【问题讨论】:

  • 很抱歉,这不是问题。您需要知道如何在 java 中处理类和函数。如何使用(MVC 模式)en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller。请阅读一些 java swing 教程以找到自己的方式
  • 所以这里的 void Main 在 Gui 类中,我尝试使用类似这样的方法: public class Main { private Main(String[] args){ Gui g = new Gui;游戏循环 gl = 新游戏循环; } } Gameloop 是我有功能的地方,我可以像这样把它们放在一起吗?这是正确的方向吗?
  • 要么为你的按钮使用数组(如果适用的话),或者将它们命名为比 button31 更好的名称,等等!
  • @user1489906 : 我做了这个很久很久了,虽然不知道它有多大帮助,因为随着我对 Java 的了解越来越多,我意识到,很多事情真的没有在我认为我必须的方式。但是here,这个游戏的代码可能会给你一些想法。用户名:guest 密码:guest
  • @nice cow 感谢您提供该项目的链接,这将很有帮助。

标签: java swing


【解决方案1】:

首先,这个程序结构很糟糕。从它的外观上看,我可以告诉您来自诸如 C 或 Basic 之类的过程编程语言。 Java 完全是关于面向对象的架构。 Java 可以按程序运行,但它并非如此。我要开始的第一件事是退出 main()。这是一个很好的方法:

public class TicTacToe
{
    public TicTacToe()
    {

    }

    public static void main(String args[])
    {
        new TicTacToe();
    }
}

井字游戏可能看起来很简单,但它同时进行了很多事情,人们正在点击按钮,因此您需要 ActionListeners,您需要在每次移动后更新屏幕的 UI,您需要检查以确保每次移动是有效的,你需要在每一步之后检查是否获胜等等。这在 main 内部几乎是不可能做到的。

将任何类型的组件直接添加到 JFrame 中通常是个坏主意。最好将 JPanel 放在 JFrame 中,然后将组件添加到 JPanel。

尝试为您的游戏创建一个类结构。这是我会做的:

TicTacToe.class --> Checks rules, checks for wins and starts and stops game
Player.class (implements ActionListener) --> Listens for each Player's input
Board.class (extends JPanel) --> this will display the components for the game
Computer.class (extends Player) --> if you wanted to create an AI this is where you would do so

如果我是你,我会读一本关于 Java 游戏开发的书或上一堂课。如果您想精通 Java,这是一个很好的起点。你错过了很多重要的知识,即使是做一个简单的任务,比如制作一个井字游戏,你也需要这些知识。

【讨论】:

  • 谢谢你,你说得对,我从基本开始。我明年开始为我在学校的第一年 IB 编程,希望能抢占先机,我希望这是正确的做法 :)
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2018-12-10
  • 2019-01-11
  • 2016-08-21
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多