0

我已经实现了一个 AbstractTableModel 对象,它是一种时间表。我想通过使用一种方法将当时将教授的主题写入单元格(所以我不想将这些行声明为已编译)。我能怎么做?这是我的 AbstractTableModel 对象。

private class MyTableModel extends AbstractTableModel {

    private String[] columns = {"","Monday","Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

    private String[][] data = {{"8:30 - 9:30","","","","","",""},
            {"9:30 - 10:30","","","","","",""},
            {"10:30 - 11:30","","","","","",""},
            {"11:30 - 12:30","","","","","",""},
            {"12:30 - 13:30","","","","","",""},
            {"13:30 - 14:30","","","","","",""},
            {"14:30 - 15:30","","","","","",""},
            {"15:30 - 16:30","","","","","",""},
            {"16:30 - 17:30","","","","","",""}};

        public int getColumnCount() {
            return columns.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columns[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

}   
4

1 回答 1

1

您必须覆盖该setValueAt方法。isCellEditable如果您希望表格编辑有问题的单元格,您还需要覆盖该方法

查看如何使用表格了解更多详细信息

更新了示例

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstractTableModel;

public class TestTable20 {

    public static void main(String[] args) {
        new TestTable20();
    }

    public TestTable20() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JTable table = new JTable(new MyTableModel());

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class MyTableModel extends AbstractTableModel {

        private String[] columns = {"", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

        private String[][] data = {{"8:30 - 9:30", "", "", "", "", "", ""},
        {"9:30 - 10:30", "", "", "", "", "", ""},
        {"10:30 - 11:30", "", "", "", "", "", ""},
        {"11:30 - 12:30", "", "", "", "", "", ""},
        {"12:30 - 13:30", "", "", "", "", "", ""},
        {"13:30 - 14:30", "", "", "", "", "", ""},
        {"14:30 - 15:30", "", "", "", "", "", ""},
        {"15:30 - 16:30", "", "", "", "", "", ""},
        {"16:30 - 17:30", "", "", "", "", "", ""}};

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return String.class;
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return columnIndex > 0;
        }

        @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            String[] row = data[rowIndex];
            row[columnIndex] = (String)aValue;
            fireTableCellUpdated(rowIndex, columnIndex);
        }

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

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

        @Override
        public String getColumnName(int col) {
            return columns[col];
        }

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

    }
}
于 2013-09-12T08:28:37.407 回答