Java 如何为JApplet制作布局

Java 如何为JApplet制作布局,java,swing,user-interface,jtextfield,japplet,Java,Swing,User Interface,Jtextfield,Japplet,我正在创建一个简单的数独游戏。由于这是我的第一个“大”,我想自己做所有事情(没有我通常用来制作GUI的NetBeans接口设计器)。因此,对于GUI,我创建了一个扩展JApplet的类,并在paint()方法中绘制了一个简单的数独字段 现在我需要制作81个文本字段,每个字段将包含1个数字。如何在屏幕上定位它们?另外,我正在考虑制作一个数组,这样我就可以用一个for循环来更改字段的enitre矩阵。建议: 切勿直接使用顶级组件(如JApplet、JFrame、JDialog等)的paint方法进

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

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

建议:

  • 切勿直接使用顶级组件(如JApplet、JFrame、JDialog等)的
    paint
    方法进行绘制
  • 如果需要进行自定义绘图,请在扩展JComponent的组件(如JPanel或JComponent本身)的
    paintComponent(…)
    方法重写中执行此操作
  • 您的问题实际上不需要定制绘画,至少现在还不需要,而且通过其他方式可以更好、更简单地解决
  • 使用诸如JLabel、JTextFields等组件。。。并使用Swing布局管理器(上面提到的其他方法)定位它们。您可以在此处找到有关如何使用此功能的教程:
  • 首先要关注的布局包括数独“单元格”的GridLayout和整个GUI的BorderLayout。避免GridBagLayout和GroupLayout,至少在开始时是这样
  • 记住,您可以通过嵌套使用简单布局管理器的JPanel来创建复杂的应用程序
  • “绘制”网格线的一种简单方法是设置使用GridLayout并将JTextFields保持为color.BLACK的JPanel的背景色,并确保为GridBagLayout提供一个小的垂直和水平间隙,以便黑色显示出来。上面列出的教程将向您展示如何做到这一点
  • 如果这是我的应用程序,我会让我的GUI朝着创建容纳该应用程序的JPanel的方向发展。然后,如果我需要在JApplet中显示它,我会创建一个非常小的应用程序,将其子类化为JApplet,然后在
    init()
    方法中,将我的数独JPanel添加到JApplet的contentPane中。这样,如果我想在JFrame中显示我的应用程序,我需要做的就是创建另一个小类来创建JFrame,并将我的数独JPanel添加到JFrame的内容窗格中,然后在JFrame上调用
    pack()
    ,然后
    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();
      }
   }
}

另外,这是我制作的第一个“真正”的GUI,请考虑一下:)如果您想使用Swing控件,为什么不使用“网格”布局之一:GridLayout或GridBagLayout。这对画网格线没什么帮助。@HovercraftFullOfEels::-),我的错,今天真的是这样的一天,我不应该回答别人,我从来没有想过乘法。好建议;可能对未来感兴趣。谢谢你的建议!我会在JPanel中完成这一切。但我总是在JApplet中插入JPanel时遇到问题,它从来都不起作用。你是怎么做的?例如,如果我有一个带有自定义绘图和一些文本字段的JPanel,我如何将其插入JApplet?很高兴知道有人愿意提供帮助:)谢谢支持@Squeezer:JApplet中的
paint(Graphics g)
方法覆盖了小程序自己的绘制方法。由于方法为空,因此无法进行绘制,因为小程序自己的绘制方法被绕过。如果您需要重写JApplet的
paint(…)
方法(我一般不建议这样做),请确保调用
super.paint(g),以便小程序的原始绘制方法可以完成绘制所需的所有操作。@HovercraftFullOfEels我找到了它。我一次只放置一个或两个对象来测试它,它们填充了整行/整列。当我将81个对象添加到场景中时,它正确地填充了整个网格。