使用JPanel/JFrame Java创建财富之轮式拼图板

使用JPanel/JFrame Java创建财富之轮式拼图板,java,swing,jframe,jpanel,jtextfield,Java,Swing,Jframe,Jpanel,Jtextfield,在我的计算机科学课上,我被分配了一个自由形式的Java编码作业,我和我的小组决定做一个幸运之轮类型的游戏。我一直在使用JPanel和JFrame开发GUI,我们的在线学院对此进行了详细介绍,所以我知道大部分的基本知识。我设法得到了一个非美观但功能正常的盒子,它在名为playerPlate的类中显示了单个玩家的金钱和姓名,还有一个按钮面板,用于在游戏过程中的某个时候在名为buttonPanel的类中显示我们需要的所有按钮 在制作字母/拼图板(拼图显示在12-14-14-12网格上)时,我遇到了一系

在我的计算机科学课上,我被分配了一个自由形式的Java编码作业,我和我的小组决定做一个幸运之轮类型的游戏。我一直在使用
JPanel
JFrame
开发GUI,我们的在线学院对此进行了详细介绍,所以我知道大部分的基本知识。我设法得到了一个非美观但功能正常的盒子,它在名为
playerPlate
的类中显示了单个玩家的金钱和姓名,还有一个按钮面板,用于在游戏过程中的某个时候在名为
buttonPanel
的类中显示我们需要的所有按钮

在制作字母/拼图板(拼图显示在12-14-14-12网格上)时,我遇到了一系列问题。这是我用来制作拼图板的
字母板
类的代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class letterBoard extends JPanel
                            implements ActionListener                   
{
private JTextField a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,
a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,
a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,
a37,a38,a39,a40,a41,a42,a43,a44,a45,a46,a47,a48,a49,
a50,a51,a52;
    JTextField board[] = new JTextField[52];
    public letterBoard()
    {
    setBackground(Color.GREEN);
    JTextField a1 = new JTextField(" ");
    JTextField a2 = new JTextField(" ");
    JTextField a3 = new JTextField(" ");
    JTextField a4 = new JTextField(" ");
    JTextField a5 = new JTextField(" ");
    JTextField a6 = new JTextField(" ");
    JTextField a7 = new JTextField(" ");
    JTextField a8 = new JTextField(" ");
    JTextField a9 = new JTextField(" ");
    JTextField a10 = new JTextField(" ");
    JTextField a11 = new JTextField(" ");
    JTextField a12 = new JTextField(" ");
    JTextField a13 = new JTextField(" ");
    JTextField a14 = new JTextField(" ");
    JTextField a15 = new JTextField(" ");
    JTextField a16 = new JTextField(" ");
    JTextField a17 = new JTextField(" ");
    JTextField a18 = new JTextField(" ");
    JTextField a19 = new JTextField(" ");
    JTextField a20 = new JTextField(" ");
    JTextField a21 = new JTextField(" ");
    JTextField a22 = new JTextField(" ");
    JTextField a23 = new JTextField(" ");
    JTextField a24 = new JTextField(" ");
    JTextField a25 = new JTextField(" ");
    JTextField a26 = new JTextField(" ");
    JTextField a27 = new JTextField(" ");
    JTextField a28 = new JTextField(" ");
    JTextField a29 = new JTextField(" ");
    JTextField a30 = new JTextField(" ");
    JTextField a31 = new JTextField(" ");
    JTextField a32 = new JTextField(" ");
    JTextField a33 = new JTextField(" ");
    JTextField a34 = new JTextField(" ");
    JTextField a35 = new JTextField(" ");
    JTextField a36 = new JTextField(" ");
    JTextField a37 = new JTextField(" ");
    JTextField a38 = new JTextField(" ");
    JTextField a39 = new JTextField(" ");
    JTextField a40 = new JTextField(" ");
    JTextField a41 = new JTextField(" ");
    JTextField a42 = new JTextField(" ");
    JTextField a43 = new JTextField(" ");
    JTextField a44 = new JTextField(" ");
    JTextField a45 = new JTextField(" ");
    JTextField a46 = new JTextField(" ");
    JTextField a47 = new JTextField(" ");
    JTextField a48 = new JTextField(" ");
    JTextField a49 = new JTextField(" ");
    JTextField a50 = new JTextField(" ");
    JTextField a51 = new JTextField(" ");
    JTextField a52 = new JTextField(" ");   
    Box b1 = Box.createHorizontalBox();
    b1.add(Box.createHorizontalGlue());
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a1);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a2);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a3);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a4);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a5);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a6);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a7);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a8);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a9);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a10);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a11);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(a12);
    b1.add(Box.createHorizontalStrut(5));
    b1.add(Box.createHorizontalGlue());
    Box b2 = Box.createHorizontalBox();
    b2.add(Box.createVerticalStrut(5));
    b2.add(a13);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a14);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a15);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a16);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a17);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a18);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a19);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a20);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a21);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a22);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a23);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a24);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a25);
    b2.add(Box.createVerticalStrut(5));
    b2.add(a26);
    b2.add(Box.createVerticalStrut(5));
    Box b3 = Box.createHorizontalBox();
    b3.add(Box.createVerticalStrut(5));
    b3.add(a27);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a28);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a29);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a30);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a31);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a32);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a33);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a34);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a35);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a36);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a37);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a38);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a39);
    b3.add(Box.createVerticalStrut(5));
    b3.add(a40);
    b3.add(Box.createVerticalStrut(5));
    Box b4 = Box.createHorizontalBox();
    b4.add(Box.createVerticalStrut(5));
    b4.add(a41);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a42);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a43);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a44);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a45);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a46);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a47);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a48);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a49);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a50);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a51);
    b4.add(Box.createVerticalStrut(5));
    b4.add(a52);
    b4.add(Box.createVerticalStrut(5));
    add(b1);
    add(b2);
    add(b3);
    add(b4);    
    }
    public void actionPerformed(ActionEvent e) 
    {
    //logic to be added later
    }
   }
对不起,代码太草率了。第一次发布,在正确格式化时遇到了一些问题。当上面的代码通过
wheelGUI
类运行时,它实际上创建了4个独立的水平段,这些水平段比我想要的要小得多,可编辑,并且堆叠不正确。我使用了不同的框、支柱和边框布局,但始终无法使其正常工作。虽然代码确实在编译和运行(我知道在单独的框之间存在一些一致性错误,忘记了重新执行该段),但效率极低,因为任何更改都必须对~52行不同的代码进行。我尝试了一种
iterate
方法:

public void iterate(JTextField[] foo)
{
    board = foo;
    for(int i=0; i<foo.length; i++)
    {
        foo[i] = new JTextField(" ");
    }
}
public void iterate(JTextField[]foo)
{
board=foo;

对于(int i=0;i,如果需要的话,应该有一个JTextFields数组和一个Box或JPanel容器数组。将它们组合在for循环中

private JTextField[] fields = new JTextField[TEXT_FIELD_COUNT]; // const = 52
private Box[] boxes = new Box[SUIT_COUNT];  // suit count = 4

for (int i = 0; i < boxes.length; i++) {
  boxes[i] = Box.createHorizontalBox();
  for (int j = 0; j < TEXT_FIELD_COUNT/SUIT_COUNT; j++) {
    int index = i * (TEXT_FIELD_COUNT / SUIT_COUNT) + j;
    fields[index] = new JTextField(COLS); // COLS = some const, possibly 10
    boxes[i].add(fields[index]); 
    // add your strut if desired
  }
}
private JTextField[]fields=new JTextField[TEXT_FIELD_COUNT];//const=52
私人包厢[]包厢=新包厢[套装数量];//套装数量=4
对于(int i=0;i
哪一行抛出NPE?您尝试在该行上使用的变量为空。如果您在查看此内容后仍然不知道答案,请告诉我们它是哪一行,我们可以提供帮助。
“这是非常低效的,因为必须对~52行不同的代码进行任何更改…”
——这告诉你应该使用数组或数组列表来简化代码,从而简化调试。去掉所有这些JTextField,或者使用数组或
ArrayList
。1)为了更快地获得更好的帮助,发布一条。2)你的问题是什么?没有52
JTextField a#=new JTextField(“”)
代码将在
b1处给出NPE。添加(a1);
。去掉字段,包括a1、a2…在for循环中添加JTextFields。在对这一点进行了一点修改后,我能够创建我想要的56个框,并将它们水平排列。非常感谢您的时间。最后一个问题:是否可以通过
Box[]Box
将设置的框排列在另一个框的上方,而不是水平排列?为了测试单个
JTextField
s的大小,我必须操作哪些变量?再次感谢。比数百行硬代码简单得多。