0

我们得到了一个家庭作业,用java实现生命游戏。

我有一个二维数组,我想在对话框中打印它。

我的数组类型是布尔值。

我所做的是通过以下方式将其转换为一个大字符串

public void Build_Matrix_String()
{
    String str1 = "";
    int i, j;

    for (i = 0; i < Rows; i++){
        str1 = str1.concat("    ");
        for (j = 0; j < Columns; j++){                
            if (Matrix[i][j] == true){
                str1 = str1.concat(" + ");
            }
            else {
                str1 = str1.concat(" - ");
            }
        }
        str1 = str1.concat("    \n");
    }
    JOptionPane.showMessageDialog(null, str1);
}

有什么方法可以做得更好,然后先将其转换为字符串?

如果没有,有什么办法让它看起来更好?

非常感谢。

阿萨夫。

4

2 回答 2

0

像那样?

在此处输入图像描述

import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class ShowMatrix {
   public static void main( String[] args ) {
      boolean[][]   matrix = new boolean[3][3];
      matrix[ 0 ][ 0 ] = true;
      matrix[ 0 ][ 2 ] = true;
      matrix[ 1 ][ 1 ] = true;
      matrix[ 2 ][ 0 ] = true;
      matrix[ 2 ][ 2 ] = true;

      StringBuilder str1   = new StringBuilder();
      for( int i = 0; i < matrix.length; i++ ) {
         for( int j = 0; j < matrix[ i ].length; j++ ) {
            str1 = str1.append( matrix[i][j] ? " + " : " - " );
         }
         str1 = str1.append( '\n' );
      }
      JOptionPane.showMessageDialog(
         null, new JLabel( "<html><pre>" + str1.toString()));
   }
}
于 2013-02-23T16:42:59.377 回答
0

我知道这没有被问到,我不应该那样做,但我无法抗拒……为什么要为此使用对话框?到目前为止,我还没有编写任何带有 swing 的程序,但是让事情运行起来似乎要好得多,例如滥用JTextField作为彩色框,然后将它们堆叠在矩阵布局中,例如:

static int MATRIX_SIZE = 15;
static int CELL_SIZE = 20;

static Color ACTIVE = new Color(255, 128, 128);
static Color INACTIVE = new Color(0, 127, 127);

static JComponent items[][] = new JComponent[MATRIX_SIZE][MATRIX_SIZE];

// here we should use something more appropriate than dummy text fields
private static JComponent createItem() {
    JTextField item = new JTextField("");
    Dimension d = new Dimension(CELL_SIZE, CELL_SIZE);
    item.setPreferredSize(d);
    item.setBackground(INACTIVE);
    item.setEditable(false);
    item.setBorder(new EmptyBorder(0, 0, CELL_SIZE, CELL_SIZE));
    return item;
}

private static void createMatrixView() {
    JFrame frame = new JFrame("Show Pixels");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JComponent panel = new JPanel();
    GridBagLayout layout = new GridBagLayout();
    panel.setLayout(layout);

    GridBagConstraints c = new GridBagConstraints();
    for (int i = 0; i < MATRIX_SIZE; i++) {
        for (int j = 0; j < MATRIX_SIZE; j++) {
            items[i][j] = createItem();
            c.gridx = i;
            c.gridy = j;
            panel.add(items[i][j], c);
        }
    }

    frame.getContentPane().add(panel);
    frame.pack();
    frame.setVisible(true);
}

private static void update(boolean[][] values) {
    for (int i = 0; i < MATRIX_SIZE; i++) {
        for (int j = 0; j < MATRIX_SIZE; j++) {
            items[i][j].setBackground(values[i][j] ? ACTIVE : INACTIVE);
        }
    }
}

public static void main(String[] args) {
    createMatrixView();

    boolean[][] matrix = new boolean[MATRIX_SIZE][MATRIX_SIZE];
    matrix[0][0] = true;
    matrix[0][2] = true;
    matrix[1][1] = true;
    matrix[2][0] = true;
    matrix[2][2] = true;

    update(matrix);
}
于 2013-02-23T18:54:42.117 回答