如何添加到JTable?

How to add to JTable?

我正在尝试在 Java 中制作 Punnett Square,为此我需要使用变量编辑 JTable 中的单元格。

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class JTableCreatingDemo {
  public static void main(String args[]) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Object rowData[][] = { { "Row1-Column1", "Row1-Column2", "Row1-Column3" },
        { "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
    Object columnNames[] = { "Column One", "Column Two", "Column Three" };
    JTable table = new JTable(rowData, columnNames);

    JScrollPane scrollPane = new JScrollPane(table);
    frame.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(300, 150);
    frame.setVisible(true);

  }
}

我正在通过该代码了解 JTable,有什么方法可以添加到 rowData[][] 和 columnNames[]?

或者使用 JTable 制作 Punnett Square 程序的任何其他方式?

编辑:

这是包含 table

的方法
public void f12(List<String> fin, int a){
    JFrame gamFrame = new JFrame();

    Object column[] = {"Gametes", "Gametes"};
    Object rowGam[][] = {};

    final DefaultTableModel model = new DefaultTableModel(rowGam, column);

    JTable gametes = new JTable(model);

    double d = Math.pow(10,a - 1);
    String[] rowData = new String[2];
    for (int e = a - 1; e > 0; e--){
        d += Math.pow(10, e - 1);
    }
    String a1 = "", a2 = "";

    if (d > 10){
        a1 = fin.get(0);
    }
    if (d == 11){
        a2 = fin.get(1);
    }
    rowData[1] = String.format(a1 + a2);
    model.addRow(rowData);



    JScrollPane scrollPane = new JScrollPane(gametes);

    gamFrame.add(scrollPane, BorderLayout.CENTER);
    gamFrame.pack();
    gamFrame.setVisible(true);
}

if (d > 10){
    a1 = fin.get(0);
}
if (d == 11){
    a2 = fin.get(1);
}

稍后会稍微复杂一些,但 table 也不适用于此。

在上述情况下,fin = {A, B} 且 a = 2。

我的预期结果是 table 一列 (配子) 和下面一行 (AB)。

最简单的解决方案:使用 DefaultTableModel 对象,如果要向其添加新行数据,然后调用其 addRow(...) 方法。

例如:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class JTableCreatingDemo {
   public static void main(String args[]) {
      JFrame frame = new JFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      Object rowData[][] = {
            { "Row1-Column1", "Row1-Column2", "Row1-Column3" },
            { "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
      Object columnNames[] = { "Column One", "Column Two", "Column Three" };

      final DefaultTableModel model = new DefaultTableModel(rowData,
            columnNames);
      JTable table = new JTable(model);

      JScrollPane scrollPane = new JScrollPane(table);

      JPanel btnPanel = new JPanel();
      btnPanel.add(new JButton(new AbstractAction("Add Data") {

         @Override
         public void actionPerformed(ActionEvent e) {
            int rows = model.getRowCount() + 1;
            String[] rowData = new String[3];
            for (int i = 0; i < rowData.length; i++) {
               rowData[i] = String.format("Row%d-Column%d", rows, (i + 1));
            }
            model.addRow(rowData);
         }
      }));

      frame.add(scrollPane, BorderLayout.CENTER);
      frame.add(btnPanel, BorderLayout.PAGE_END);
      // frame.setSize(300, 150);
      frame.pack();
      frame.setVisible(true);

   }
}

同样,您可以使用 DefaultTableModel 的其他方法,例如 removeRow(...)setValueAt(...)。如果这还不能满足您的需求,那么您需要创建自己的 TableModel,它是从 AbstractTableModel 扩展而来的。这将需要更多工作,但会导致 class 更符合 OOP。