Java Swing帮助

Java Swing帮助,java,swing,jbutton,Java,Swing,Jbutton,我试图创建一个包含JButtons的网格,索引值位于按钮网格的左侧和右侧 这是我的代码,但我得到了一个NullPointerException。有什么问题 public class Test { public static void main(String args[]) { JFrame myapp = new JFrame("test"); myapp.setLayout(new FlowLayout()); myapp.setDefaultCloseOperati

我试图创建一个包含
JButtons
的网格,索引值位于按钮网格的左侧和右侧

这是我的代码,但我得到了一个
NullPointerException
。有什么问题

public class Test {
public static void main(String args[]) {
    JFrame myapp = new JFrame("test");
    myapp.setLayout(new FlowLayout());

    myapp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myapp.setSize(400,400);
    myapp.setVisible(true);

    myapp.getContentPane().add(Board());
}

private static JPanel Board() {
    JButton[][] buttons = new JButton [10][10];

    JPanel board = new JPanel(new GridLayout(11,11));

    String[] rowlabels = {" ","A","B","C","D","E","F","G","H","I","J"};
    String[] columnlabels = {" ","1","2","3","4","5","6","7","8","9","10"};
    JTextField k;

    for (int i = 0; i < 11; i++) {
        for (int j = 0; j < 11; j++) {
            if ((j != 0) && (i != 0)) {
                //myboard[i-1][j-1].addActionListener(new ButtonHandler());
                board.add(buttons[i-1][j-1]);
            }
            if (i == 0) {
                if (j != 0) {
                    // used to display row of numbers
                    k = new JTextField(columnlabels[j]);
                    k.setEditable(false);
                    k.setHorizontalAlignment((int) JFrame.CENTER_ALIGNMENT);
                } else {
                    // used to display column of numbers
                    k = new JTextField();
                    k.setEditable(false);
                }
                board.add(k);
            } else if (j == 0) {
                k = new JTextField(rowlabels[i]);
                k.setEditable(false);
                k.setHorizontalAlignment((int) JFrame.CENTER_ALIGNMENT);
                board.add(k);
            }
        }
    }

    return board;
}
}
公共类测试{
公共静态void main(字符串参数[]){
JFrame myapp=新JFrame(“测试”);
myapp.setLayout(新的FlowLayout());
myapp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myapp.setSize(400400);
myapp.setVisible(true);
myapp.getContentPane().add(Board());
}
专用静态JPanel板(){
JButton[][]按钮=新JButton[10][10];
JPanel板=新JPanel(新网格布局(11,11));
字符串[]行标签={”、“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”};
字符串[]columnlabels={”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”};
jtextk;
对于(int i=0;i<11;i++){
对于(int j=0;j<11;j++){
如果((j!=0)&(i!=0)){
//myboard[i-1][j-1].addActionListener(新按钮Handler());
添加(按钮[i-1][j-1]);
}
如果(i==0){
如果(j!=0){
//用于显示一行数字
k=新的JTextField(columnlabels[j]);
k、 可编辑设置(假);
k、 setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT);
}否则{
//用于显示数字列
k=新的JTextField();
k、 可编辑设置(假);
}
董事会。添加(k);
}else如果(j==0){
k=新的JTextField(行标签[i]);
k、 可编辑设置(假);
k、 setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT);
董事会。添加(k);
}
}
}
返回板;
}
}
我可能在做一些显而易见的事情,但Swing对我来说是一种新事物,所以任何帮助都将不胜感激

JButton[][] buttons = new JButton [10][10];
如果只创建一个空数组,则必须初始化按钮。将null添加到面板会导致NPE


如果只创建一个空数组,则必须初始化按钮。将null添加到面板会导致NPE。

刚刚尝试了您的代码,并注意到您获得NPE是因为您只是创建了一个按钮数组,但没有在其中创建按钮,所以您的按钮数组包含null值,并且当尝试将其添加到板中时,会抛出NPE

创建阵列后,请尝试以下操作:

 private static JPanel Board() {
    JButton[][] buttons = new JButton [10][10];
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            buttons[i][j] = new JButton();
        }
    }
    JPanel board = new JPanel(new GridLayout(11,11));

    String[] rowlabels = {" ","A","B","C","D","E","F","G","H","I","J"};
    String[] columnlabels = {" ","1","2","3","4","5","6","7","8","9","10"};
    JTextField k;

    // ---- your remaining code.

 }
专用静态JPanel板(){
JButton[][]按钮=新JButton[10][10];
对于(int i=0;i<10;i++){
对于(int j=0;j<10;j++){
按钮[i][j]=新的JButton();
}
}
JPanel板=新JPanel(新网格布局(11,11));
字符串[]行标签={”、“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”};
字符串[]columnlabels={”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”};
jtextk;
//----您剩余的代码。
}

刚刚尝试了你的代码,注意到你得到了NPE,因为你只是在创建一个按钮数组,但没有在其中创建按钮,所以你的按钮数组包含空值,当试图将它添加到板中时,它抛出NPE

创建阵列后,请尝试以下操作:

 private static JPanel Board() {
    JButton[][] buttons = new JButton [10][10];
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            buttons[i][j] = new JButton();
        }
    }
    JPanel board = new JPanel(new GridLayout(11,11));

    String[] rowlabels = {" ","A","B","C","D","E","F","G","H","I","J"};
    String[] columnlabels = {" ","1","2","3","4","5","6","7","8","9","10"};
    JTextField k;

    // ---- your remaining code.

 }
专用静态JPanel板(){
JButton[][]按钮=新JButton[10][10];
对于(int i=0;i<10;i++){
对于(int j=0;j<10;j++){
按钮[i][j]=新的JButton();
}
}
JPanel板=新JPanel(新网格布局(11,11));
字符串[]行标签={”、“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”};
字符串[]columnlabels={”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”};
jtextk;
//----您剩余的代码。
}

应在EDT上构建Swing GUI。这部分留给OP做练习

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

public class Test {
    public static void main(String args[]) {
        JFrame myapp = new JFrame("test");
        myapp.setLayout(new FlowLayout());

        myapp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myapp.getContentPane().add(Board());

        // very important!
        myapp.pack();

        // do these last.
        myapp.setSize(400,400);
        myapp.setVisible(true);

    }

    private static JPanel Board() {
        JButton[][] buttons = new JButton [10][10];
        for(int x=0; x<buttons.length; x++) {
            for (int y=0; y<buttons[0].length; y++) {
                buttons[x][y] = new JButton();
            }
        }

        JPanel board = new JPanel(new GridLayout(11,11));

        String[] rowlabels = {" ","A","B","C","D","E","F","G","H","I","J"};
        String[] columnlabels = {" ","1","2","3","4","5","6","7","8","9","10"};
        JTextField k;

        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if ((j != 0) && (i != 0)) {
                    //myboard[i-1][j-1].addActionListener(new ButtonHandler());
                    board.add(buttons[i-1][j-1]);
                }
                if (i == 0) {
                    if (j != 0) {
                        // used to display row of numbers
                        k = new JTextField(columnlabels[j]);
                        k.setEditable(false);
                        k.setHorizontalAlignment((int) JFrame.CENTER_ALIGNMENT);
                    } else {
                        // used to display column of numbers
                        k = new JTextField();
                        k.setEditable(false);
                    }
                    board.add(k);
                } else if (j == 0) {
                    k = new JTextField(rowlabels[i]);
                    k.setEditable(false);
                    k.setHorizontalAlignment((int) JFrame.CENTER_ALIGNMENT);
                    board.add(k);
                }
            }
        }

        return board;
    }
}
import java.awt.*;
导入javax.swing.*;
公开课考试{
公共静态void main(字符串参数[]){
JFrame myapp=新JFrame(“测试”);
myapp.setLayout(新的FlowLayout());
myapp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myapp.getContentPane().add(Board());
//非常重要!
myapp.pack();
//最后做这些。
myapp.setSize(400400);
myapp.setVisible(true);
}
专用静态JPanel板(){
JButton[][]按钮=新JButton[10][10];

对于(intx=0;xSwing GUI应该在EDT上构建。该部分留给OP作为练习

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

public class Test {
    public static void main(String args[]) {
        JFrame myapp = new JFrame("test");
        myapp.setLayout(new FlowLayout());

        myapp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myapp.getContentPane().add(Board());

        // very important!
        myapp.pack();

        // do these last.
        myapp.setSize(400,400);
        myapp.setVisible(true);

    }

    private static JPanel Board() {
        JButton[][] buttons = new JButton [10][10];
        for(int x=0; x<buttons.length; x++) {
            for (int y=0; y<buttons[0].length; y++) {
                buttons[x][y] = new JButton();
            }
        }

        JPanel board = new JPanel(new GridLayout(11,11));

        String[] rowlabels = {" ","A","B","C","D","E","F","G","H","I","J"};
        String[] columnlabels = {" ","1","2","3","4","5","6","7","8","9","10"};
        JTextField k;

        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if ((j != 0) && (i != 0)) {
                    //myboard[i-1][j-1].addActionListener(new ButtonHandler());
                    board.add(buttons[i-1][j-1]);
                }
                if (i == 0) {
                    if (j != 0) {
                        // used to display row of numbers
                        k = new JTextField(columnlabels[j]);
                        k.setEditable(false);
                        k.setHorizontalAlignment((int) JFrame.CENTER_ALIGNMENT);
                    } else {
                        // used to display column of numbers
                        k = new JTextField();
                        k.setEditable(false);
                    }
                    board.add(k);
                } else if (j == 0) {
                    k = new JTextField(rowlabels[i]);
                    k.setEditable(false);
                    k.setHorizontalAlignment((int) JFrame.CENTER_ALIGNMENT);
                    board.add(k);
                }
            }
        }

        return board;
    }
}
import java.awt.*;
导入javax.swing.*;
公开课考试{
公共静态void main(字符串参数[]){
JFrame myapp=新JFrame(“测试”);
myapp.setLayout(新的FlowLayout());
myapp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myapp.getContentPane().add(Board());
//非常重要!
myapp.pack();
//最后做这些。
myapp.setSize(400400);
myapp.setVisible(true);
}
专用静态JPanel板(){
JButton[][]按钮=新JButton[10][10];

对于(int x=0;xon您在哪一行获得NPE?您在哪一行获得NPE?感谢提示!我不再获得NPE,但网格仍然没有出现在我的gui上…感谢提示!我不再获得NPE,但网格仍然没有出现在我的gui上…非常感谢!这有助于修复所有问题。:)非常感谢!这有助于解决所有问题。:)