1

好的,所以我在 JAVA 方面很菜鸟,而且真的是一般的编程。我正在尝试制作一个使用 GUI 界面运行的石头、纸、剪刀应用程序。我正在尝试的是我想到的最简单的事情,按下一个按钮供您选择(r、p 或 s),这将在程序的其余部分中使用一个变量来与计算机的选择进行比较,找到获胜者等。我已经完成了程序,问题是 GUI 的东西。我正在使用 netbeans 和 JFrame,这对我来说是全新的。我有很多问题,也许有人可以链接到我的一个不错的教程,但是到目前为止,使用官方 netbeans 站点并没有太大帮助。无论如何:

  1. 我不确定将在文本程序中的主方法代码放在哪里,创建一个新类,或者将它放在我使用的框架的主方法中。

  2. 因此,我什至无法编译的原因是主函数试图使用我想在按钮中创建的变量。我猜我不知道整个操作顺序。我查看了 netbeans 示例,我认为我可以通过做一些更复杂的事情来完成这项工作,但这似乎没有必要?

4

3 回答 3

1

这是开始学习 Swing 的好地方。 我要提醒您,如果您想快速创建一个大的 GUI,那么使用 NetBeans 非常好,但如果您还不熟悉 Swing 的工作原理,可能会导致比它解决的问题更多的问题。

从我在项目中学到的一些技巧:

  • 在开始编写 GUI 之前,考虑一下程序的底层模型是什么。例如,也许您会使用类似以下伪代码的游戏类:
开始新游戏
   获得玩家的选择
   为计算机随机生成一个选项
   比较选择
      如果玩家的选择更强
         玩家获胜
      否则计算机获胜
   返回获胜者
  • 当您要构建 GUI 时,使用模型-视图-控制器模式是一个很好的起点。这样可以确保程序的组件之间存在分离;如果您需要更改视图或模型,请不要破坏其他组件。

  • 这在 Java 的实践中通常意味着您将视图和控制器包装在一起,通常像 qpingu 指出的那样扩展 JFrame。JFrame 需要引用您的模型类和包含各种控件的面板。

于 2009-05-10T09:10:10.373 回答
1

像你习惯的那样开始输入代码的地方是源包目录,通常命名为你所谓的新项目:YourFileName.java

关键是在新项目的文件名中查找你在设置中添加的名称。

进入后,有一些方法可以为您启动应用程序。底部是你和我最熟悉的 main() 所在的位置 :) 。

    ...

    @Override 
    protected void configureWindow(java.awt.Window root) {
    }

    /** 
    * A convenient static getter for the application instance.
    * @return the instance of DesktopApplication1
    */


    public static DesktopApplication1 getApplication() {
        return Application.getInstance(DesktopApplication1.class);
    }

    /**
    * Main method launching the application.
    */

    public static void main(String[] args) {
    launch(DesktopApplication1.class, args);

    }
}

就个人而言,我更喜欢桌面应用程序,因为它开始时会为您提供大量预先生成的代码。

于 2012-01-19T17:53:06.103 回答
0

你想找到一些关于 Swing 的文章和教程。

这里有一些代码可以帮助你:

// RockPaperScissors is the JFrame as well as the KeyListener.
// You could make another class to handle the key presses instead by doing:
// addKeyListener(new myOtherClass());
// So long as myOtherClass implements KeyListener
class RockPaperScissors extends JFrame implements KeyListener {
  public RockPaperScissors() {
    // Listen for any key presses.
    addKeyListener(this);
  }

  public void keyPressed(KeyEvent e) {
    // Figure out which key was pressed based on it's code.
    // http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyEvent.html
    switch (e.getKeyCode()) {
      case e.VK_R:
        // Rock
      break;
      case e.VK_P:
        // Paper
      break;
      case e.VK_S:
        // Scissors
      break;
    }
  }

  // You can use these if you want, but we don't care about them.
  public void keyReleased(KeyEvent e) { }
  public void keyTyped(KeyEvent e) { }
}

void main() {
  // Set up the GUI (which is just a JFrame!)
  new RockPaperScissors();
  // The main program can exit because the JFrame runs on it's own thread.
}
于 2009-03-16T06:22:01.433 回答