如何用jlabels在jframe中显示矩阵

n6lpvg4x  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(544)

我想用java语言在一个 JFrame ,我知道怎么做,但我现在有这个问题,我不知道´我不知道怎么解决。我试过很多东西,但都没用。

问题是图中标出的这些空位。
代码:

public class VentanaConsulta extends javax.swing.JFrame {

JLabel[] arreglo = new JLabel[16];

public VentanaConsulta(Sistema sistema, VentanaInicial ventanaInicial) {
    this.modelo = sistema;
    this.ventanaInicial = ventanaInicial;
    initComponents();
    IniciarComponentes();

}

private void IniciarComponentes() {

    int[][] campo = {{1,2,3,4}, {0,0,0,0} , {0,0,0,0}, {0,0,0,0}};

    setLayout(new GridLayout(4, 4));
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {

            arreglo[i] = new JLabel(Integer.toString(campo[i][j]));
            arreglo[i].setHorizontalAlignment(SwingConstants.CENTER);
            add(arreglo[i]);
        }

    }

}
gpfsuwkq

gpfsuwkq1#

您的图像显示,当您将容器的布局设置为4x4网格时,您将向该容器添加超过16个项目,这可能是由于您设置了错误的容器布局。您可能正在设置主jframe的contentpane的布局,向其中添加jlabel,并向其中添加其他内容,从而弄乱了网格的大小。
我建议您创建一个新的jpanel,一个用来保存jlabel网格,给它一个4x4网格布局,添加jlabel,然后将这个jpanel添加到主gui(jframe)或jframe中显示的容器中。
是的,arreglo数组索引的使用是错误的,因为您试图将整行添加到单个数组项中。e、 g.类似于:

private void IniciarComponentes() {
    int[][] campo = {{1,2,3,4}, {0,0,0,0} , {0,0,0,0}, {0,0,0,0}};
    JPanel gridPanel = new JPanel(new GridLayout(4, 4));
    // setLayout(new GridLayout(4, 4));
    for (int i = 0; i < campo.length; i++) {  // avoid using "magic" numbers
        for (int j = 0; j < campo[i].length; j++) {
            JLabel label new JLabel(Integer.toString(campo[i][j]));
            label.setHorizontalAlignment(SwingConstants.CENTER);
            arreglo[4 * i + j] = label
            gridPanel.add(label);
        }
    }

    // here add gridPanel to the main GUI
}

相关问题