簡體   English   中英

使用AbstractTableModel將行添加到JTable

[英]Add row to JTable with AbstractTableModel

在向JTable添加空行時,我需要幫助。 我為JTable使用AbstractTableModel! 我在這里為您提供了一個小型可執行程序,因此可以更輕松地為我提供幫助。

主類-TestClass.java

package testproject;

import java.awt.event.ActionEvent;
import java.util.ArrayList;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JTable;

public class TestClass {

    String[] header = {"Name", "Quantity"};
    ArrayList<Object[]> data = new ArrayList<Object[]>();

    public TestClass() {
        data.add(new Object[]{"Apple", "234"});
        data.add(new Object[]{"Banana", "123"});
        data.add(new Object[]{"Cranberry", "346"});

        JFrame frame = new JFrame();
        JTable table = new JTable(new Model(data, header));
        JMenuBar menubar = new JMenuBar();
        JMenu editmenu = new JMenu("Edit");

        Action addrowaction = new AbstractAction("Add Row") {
            private static final long serialVersionUID = 1433684360133156145L;

            @Override
            public void actionPerformed(ActionEvent e) {
                data.add(new Object[9]);
            }
        };

        frame.add(table);

        frame.setJMenuBar(menubar);
        menubar.add(editmenu);
        editmenu.add(addrowaction);

        frame.setLocationByPlatform(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.pack();
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestClass();
            }
        });
    }
}

表模型-Model.java

package testproject;

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class Model extends AbstractTableModel{
    private static final long serialVersionUID = 6889542282067432083L;

    private String[] header;
    private ArrayList<Object[]> data;

    public Model(ArrayList<Object[]> data, String[] header) {
        this.header = header;
        this.data = data;
    }

    @Override
    public int getColumnCount() {
        return header.length;
    }

    @Override
    public String getColumnName(int column) {
        return header[column];
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public Object getValueAt(int row, int column) {
        return data.get(row)[column];
    }

    @Override
    public void setValueAt(Object value, int row, int column) {
        data.get(row)[column] = value;
        fireTableCellUpdated(row, column);
    }
}

基本上,我想在編輯菜單中使用操作來添加一個空行。 請不要用其他鏈接回答! 我搜索了它,但不理解它,或者它不適合我的程序!

編輯:更新了MadProgrammer建議的源! 只剩下一個問題。 我如何更新JTable,以便在必須調整Window大小和Table正在更新的同時顯示新的Row!

  • 謝謝你的幫助

正如@MadProgrammer所說,數組在概念上很容易理解,但很難擴展和收縮。 而是使用Collection 在此示例中MyModel管理實現為ArrayList<Row>List<Row> ArrayList<Row> Row是一個普通舊式Java對象( POJO ),具有每列的屬性。 嘗試以構造函數為例,添加一種用於插入新行的方法,然后嘗試向Row添加一列。 該示例使用靜態嵌套類來避免混亂。

暫無
暫無

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

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