Получить текст из матрицы текстового поля - PullRequest
0 голосов
/ 15 мая 2018

Я создал матрицу текстового поля, но не могу получить текст, который вводится в эти текстовые поля.Я получаю доступ только к самому объекту текстового поля в матрице, а не к реальному тексту внутри этих текстовых полей.

Вот весь код.Мой основной язык - испанский, поэтому некоторые аннотации на испанском, а некоторые фразы.Под кодом я напишу мою главную проблему:

import java.awt.Color;
import java.awt.Cursor;
import javax.swing.*;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javafx.scene.layout.Border;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.util.Arrays;

public class FrmArregloControles extends javax.swing.JFrame implements ActionListener{
    public FrmArregloControles() {
        initComponents();
        iniciarComponentes();
    }    
    private void iniciarComponentes() {
        byte numRen = Byte.parseByte(JOptionPane.showInputDialog(null, "¿Número de Renglones?")),
             numCol = Byte.parseByte(JOptionPane.showInputDialog(null, "¿Número de Columnas?"));
        int [][] intMatriz = new int[numRen][numCol];
        txtMatriz = new JTextField[numRen][numCol];
        String txt = JOptionPane.showInputDialog(this,"¿Qué ponemos?");

        if (numRen >= 1 && numCol >= 1) {
            lblRen = new JLabel[numRen];
            lblCol = new JLabel[numCol];

            for (byte r = 0; r < txtMatriz.length; r++) {//for controla los renglones (r)
                // creacion del vector de etiquetas lblRen
                lblRen[r] = new JLabel();
                // CONFIURACION DE PROPIEDADES PARA EL VECTOR PARA ETIQUTAS DE RENGLONES
                lblRen[r].setBounds(new Rectangle(15, 
                                                  15 + (25 + 10) * (r + 1), 
                                                  40, 25));

                lblRen[r].setText("[" + (r+1) + "]");
                lblRen[r].setBorder(border);
                lblRen[r].setHorizontalAlignment(SwingConstants.CENTER);
              //Adición de la etiqueta a la forma
                this.add(lblRen[r]);
                for (byte c = 0; c < txtMatriz[r].length; c++){
                  // creacion del vector de etiquetas lblRen
                lblCol[c] = new JLabel();
                // CONFIURACION DE PROPIEDADES PARA EL VECTOR PARA ETIQUTAS DE COLUMNAS
                lblCol[c].setBounds(new Rectangle(15 + (lblRen[0].getWidth() + 10) * (c + 1), 
                                                  15, 
                                                  40, 25));

                lblCol[c].setText("[" + (c+1) + "]");
                lblCol[c].setBorder(border);
                lblCol[c].setVerticalAlignment(SwingConstants.CENTER);
                lblCol[c].setHorizontalAlignment(SwingConstants.CENTER);
              //Adición de la etiqueta a la forma
                this.add(lblCol[c]);

              //Creación de matriz de campos de texto
                txtMatriz[r][c] = new JTextField();
              //Configuración de propiedades de campos de texto
                txtMatriz[r][c].setBounds(new Rectangle(15 + (lblRen[0].getWidth() + 10) * (c+1), 
                                                        15 + (lblRen[0].getHeight() + 10) * (r + 1), 
                                                        40, 25));

                txtMatriz[r][c].setToolTipText("Campo " + (r + 1) + ", " + (c + 1));
                txtMatriz[r][c].setCursor(new Cursor(Cursor.TEXT_CURSOR));
                this.add(txtMatriz[r][c]);
                txtMatriz[r][c].setText(txt);
                txtMatriz[r][c].getText();
                }
            }
        }
        else {
            JOptionPane.showMessageDialog(null, "Tamaño Invalido");
        }

        btnCapturar.setBounds (new Rectangle(((((40 + (numRen * 20))- 30) + (numRen * 10)/2)), 
                                                ((numCol*35) + 50 ), 
                                                 100, 25));

        this.add(btnCapturar);
        btnCapturar.addActionListener(this);
    }


            //Button's function
        public void actionPerformed(ActionEvent e){
            System.out.println(Arrays.deepToString(txtMatriz));
        }


    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FrmArregloControles().setVisible(true);
            }
        });
    }
//DECLARACIÓN DE CONTROLES
    JLabel lblRen[], lblCol[];
    JTextField txtMatriz[][];
    JButton btnCapturar = new JButton("Capturar");
    javax.swing.border.Border border = BorderFactory.createLineBorder(Color.black, 1);

    // Variables declaration - do not modify                     
    // End of variables declaration                   
}

Я хочу получить текст txtMatriz из каждого текстового поля внутри него и назначить его вдругая матрица, но матрица типа int.Я попробовал несколько методов, но ближе я подхожу, когда я заметил, что JTextField не может быть преобразован в int.Сказав это, я предполагаю, что не могу добраться до текстов этих текстовых полей с помощью метода Integer.parseInt.Итак, подводя итог, мне нужна помощь для преобразования txtMatriz в intMatriz

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

[Обратите внимание, я изменил свой первоначальный ответ теперь, когда вопрос был значительно расширен, включая полный исходный код, что позволяет мне решить проблему напрямую]

Ok. Это довольно странно, потому что ваш оригинальный пример кода, хотя его больше не было, был в некотором роде правильным путем, поэтому я не совсем понимаю, почему он не работает. В любом случае, вот что вам нужно сделать:

  1. Переместите объявление int [] [] intMatrix, чтобы оно стало переменной экземпляра, как txtMatriz. Я предпочитаю размещать их над конструктором:

    int [][] intMatriz;

  2. Точно так же, как только вы знаете размеры матрицы, инициализируйте:

    intMatriz = new int[numRen][numCol];

  3. Наконец, обновите действие, выполненное следующим образом:

    public void actionPerformed(ActionEvent e){
        for (byte r = 0; r < txtMatriz.length; r++) {
            for (byte c = 0; c < txtMatriz[r].length; c++) {
                intMatriz[r][c] = Integer.parseInt(txtMatriz[r][c].getText());
            }
        }
        System.out.println(Arrays.deepToString(intMatriz));
    }
    

Когда я делаю эти изменения, я вижу вывод вроде:

[[5, 5, 5, 5, 5], [5, 5, 5, 5, 5], [5, 5, 5, 5, 5], [5, 5, 5, 5, 5], [6, 6, 5, 6, 6]]
0 голосов
/ 16 мая 2018

Почему бы не попробовать перебрать каждый массив с помощью цикла for?

for(byte i = 0; i < intMatrix.length; i++){
    System.out.println(Arrays.toString(intMatrix[i]));
}
...