Итерация jTable в jTextArea - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу повторить jTable в jTextArea

Я попробовал этот код:

int row = tableModel.getRowCount();

        for (int i = 0; i < row; i++) {
                jRcRprtTextArea.setText("___________________________________\n"
                        + "Item Name    Price   Qty.    Total\n"
                        + "_____________________________________________");
        jRcRprtTextArea.append("\n"
                + tableModel.getValueAt(i, 1)
                + "\t" + tableModel.getValueAt(i, 2)
                + "\t" + tableModel.getValueAt(i, 3)
                + "\t" + tableModel.getValueAt(i, 5)
        );
    }

Но это не работает
Даже я пытался в одной строке вдля цикла, но это также не то, чего я хочу достичь.
Я ожидаю, что jTextArea должен иметь весь текст из jTable, как будто я добавлю новую строку в jTable.
Исчезновение предыдущего текстас jTextArea и добавлением туда только что добавленного текста строки. Здесь я вижу, что все строки печатаются с использованием метода println().
Так почему же он не попадает в jTextArea?

1 Ответ

0 голосов
/ 28 декабря 2018

Попробуйте этот пример кода.Это должно работать.

Суть в том, что вам нужно позвонить на JTextArea.setText() в пределах TableModelListener.Я исправил индексы столбцов в вашем коде.И заголовки текстовой области перемещаются из цикла for.

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TableToTextArea
{
  private static DefaultTableModel tableModel;
  private static JTextArea textArea = new JTextArea();

  public static void main(String[] args)
  {
    JButton button = new JButton("Add Row");
    button.addActionListener(new ActionListener()
    {
      @Override
      public void actionPerformed(ActionEvent e)
      {
        tableModel.addRow(new String[] {"Abc", "15", "2", "30"});
      }
    });

    JFrame f = new JFrame("Table to Text Area");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().setLayout(new GridLayout(3, 1));
    f.getContentPane().add(new JScrollPane(buildTable()));
    f.getContentPane().add(new JScrollPane(textArea));
    f.getContentPane().add(button);
    f.setBounds(300, 200, 500, 400);
    f.setVisible(true);
  }

  private static JTable buildTable()
  {
    tableModel = new DefaultTableModel(new String[0][0], new String[] {"Item Name", "Price", "Qty", "Total"});
    tableModel.addTableModelListener(new TableModelListener()
    {
      @Override
      public void tableChanged(TableModelEvent e)
      {
        int row = tableModel.getRowCount();

        textArea.setText("_____________________________________________\n"
            + "Item Name\tPrice\tQty.\tTotal\n"
            + "_____________________________________________");
        for (int i = 0; i < row; i++)
        {
          textArea.append("\n"
              + tableModel.getValueAt(i, 0) // Column index is changed
              + "\t" + tableModel.getValueAt(i, 1) // Column index is changed
              + "\t" + tableModel.getValueAt(i, 2) // Column index is changed
              + "\t" + tableModel.getValueAt(i, 3) // Column index is changed
          );
        }
      }
    });
    return new JTable(tableModel);
  }
}
...