2

我正在创建一个简单的数独游戏。因为这是我的第一个“大”,所以我想自己做所有事情(没有我通常用来制作 GUI 的 NetBeans 界面设计器)。因此,对于 GUI,我创建了一个扩展 JApplet 的类,并在 paint() 方法中绘制了一个简单的数独字段。

现在我需要制作 81 个文本字段,每个字段都包含 1 个数字。如何在屏幕上定位它们?另外,我正在考虑制作一个数组,这样我就可以用一个 for 循环来更改整个字段矩阵。

4

1 回答 1

6

建议:

  • 切勿直接在paintJApplet、JFrame、JDialog 等顶级组件的方法中绘制。
  • 如果您需要进行自定义绘图,请改为在paintComponent(...)扩展 JComponent 的组件(例如 JPanel 或 JComponent 本身)的方法覆盖中执行此操作。
  • 您的问题实际上并不需要自定义绘画,至少现在还不需要,并且可以通过其他方式更好、更简单地解决。
  • 使用 JLabels、JTextFields 等组件,并使用 Swing 布局管理器(上面提到的其他方式)定位它们。您可以在此处找到有关如何使用它的教程:在容器中布局组件
  • 首先要关注的布局包括数独“单元格”的 GridLayout 和整个 GUI 的 BorderLayout。至少在开始时避免使用 GridBagLayout 和 GroupLayout。
  • 请记住,您可以通过嵌套 JPanel 来创建复杂的应用程序,每个 JPanel 都使用一个简单的布局管理器。
  • “绘制”网格线的一种简单方法是将使用 GridLayout 并将 JTextFields 保存为 Color.BLACK 的 JPanel 的背景颜色设置为 Color.BLACK,并确保为您的 GridBagLayout 提供一个小的垂直和水平间隙,以便黑色显示出来。上面列出的教程将向您展示如何执行此操作。
  • 如果这是我的应用程序,我会将我的 GUI 用于创建一个容纳该应用程序的 JPanel。然后,如果我需要在 JApplet 中显示它,我会创建一个非常小的应用程序来继承 JApplet,然后在该init()方法中,将我的 Sudoku JPanel 添加到 JApplet 的 contentPane 中。这样,如果我想在 JFrame 中显示我的应用程序,我需要做的就是创建另一个小类来创建 JFrame 并将我的 Sudoku JPanel 添加到 JFrame 的 contentPane 中,然后调用pack()JFrame,然后然后setVisible(true)

关于如何将 JPanel 添加到 JApplet 的问题,本教程将再次向您展示如何执行此操作。如果您还没有链接到教程的大索引,您会想要这样做:真正的大索引

一个非常简单的例子是这样的:

import java.lang.reflect.InvocationTargetException;
import javax.swing.*;

public class MyApplet extends JApplet {
   @Override
   public void init() {
      try {
         SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
               getContentPane().add(new MyJPanel());             
            }
         });
      } catch (InterruptedException e) {
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      }
   }
}
于 2012-02-18T15:14:12.157 回答