如何为JApplet制作布局

Squ*_*zer 2 java user-interface swing jtextfield japplet

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

现在我需要制作81个文本字段,每个字段将包含1个数字.我如何将它们放在屏幕上?此外,我正在考虑制作一个数组,所以我将能够用一个for循环改变字段的enitre矩阵.

Hov*_*els 6

建议:

  • 永远不要直接在paint顶级组件的方法中绘制,例如JApplet,JFrame,JDialog等.
  • 如果需要进行自定义绘制,请在paintComponent(...)扩展JComponent的组件的方法重写中执行此操作,例如JPanel或JComponent本身.
  • 你的问题并不需要自定义绘画,至少现在还没有,并且通过其他方式更好,更简单地解决了.
  • 使用诸如JLabel,JTextFields等组件......并使用Swing布局管理器(上面提到的其他方法)定位它们.您可以在此处找到有关如何使用它的教程:在容器中布置组件
  • 首先要关注的布局包括用于Sudoku"单元格"的GridLayout和用于整个GUI的BorderLayout.至少在开始时避免使用GridBagLayout和GroupLayout.
  • 请记住,您可以通过嵌套每个使用简单布局管理器的JPanel来创建复杂的应用程序.
  • "绘制"网格线的一种简单方法是设置JPanel的背景颜色,该JPanel使用GridLayout并将JTextFields保存为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();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)