簡體   English   中英

如何添加到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程序的任何其他方法?

編輯:

這是包含表的方法

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);
}

稍后會稍微復雜一些,但是該表也無法使用。

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

我的預期結果是一張表,其中有一欄(配子),其下一行(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擴展而來的。 這將需要更多的工作,但可能會導致類更符合OOP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM