如何为JApplet制作布局

时间:2012-02-18 15:09:17

标签: java swing user-interface jtextfield japplet

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

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

1 个答案:

答案 0 :(得分:6)

建议:

  • 不要直接在顶级组件的paint方法中绘制,例如JApplet,JFrame,JDialog等。
  • 如果您需要进行自定义绘图,请在扩展JComponent的组件的paintComponent(...)方法覆盖中执行此操作,例如JPanel或JComponent本身。
  • 你的问题并不需要自定义绘画,至少现在还没有,并且通过其他方式更好,更简单地解决了。
  • 使用诸如JLabels,JTextFields等组件,并使用Swing布局管理器(上面提到的其他方法)定位它们。您可以在此处找到有关如何使用此内容的教程:Laying Out Components in a Container
  • 首先要关注的布局包括用于Sudoku“cells”的GridLayout和用于整个GUI的BorderLayout。至少在开始时避免使用GridBagLayout和GroupLayout。
  • 请记住,您可以通过嵌套每个使用简单布局管理器的JPanel来创建复杂的应用程序。
  • “绘制”网格线的一种简单方法是设置使用GridLayout的JPanel的背景颜色并将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的问题,教程将再次向您展示如何执行此操作。如果您尚未链接到教程的大索引,则需要执行此操作:The Really Big Index

一个非常简单的例子如下:

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();
      }
   }
}