如何在abstractTableModel中获取自己的方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在abstractTableModel中获取自己的方法?相关的知识,希望对你有一定的参考价值。

我正在使用我自己的TableModel构建一个Swing-Gui并在JScrollPane中有一个JTable对象。模型核是包含数据的LinkList。我这样做是因为LinkedList能够随时插入行作为Object []而无需替换2D数组。我写了一个方法,在我的LinkedList中插入一个Object [],但我不能通过调用main方法中的TableModel从JTable调用它,我不知道为什么。有人有想法吗?

public class TableModel extends AbstractTableModel {    

    String[] columnNames = { "Kundennummer","Firma","Nachname","Vorname","Telefonnummer","Emailadresse","Adresszeile 1","Adresszeile 2", "PLZ", "Ort", "Geburtsdatum"};

    int anzahlAttribute = 11;
    LinkedList<Object[]> data;

    public TableModel(LinkedList<Object[]> rows){
        this.data = rows;
    }

    @Override
    public String getColumnName(int col) {
        return columnNames[col].toString();
    }
    /**
     * @see javax.swing.table.TableModel#getColumnCount()
     */
    @Override
    public int getColumnCount() {
        // TODO Auto-generated method stub
        return columnNames.length;
    }

    /**
     * @see javax.swing.table.TableModel#getRowCount()
     */
    @Override
    public int getRowCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    /**
     * @see javax.swing.table.TableModel#getValueAt(int, int)
     */
    @Override
    public Object getValueAt(int arg0, int arg1) {
        // TODO Auto-generated method stub
        try{
        return data.get(arg0)[arg1];
        }catch(ArrayIndexOutOfBoundsException e){
            return "";
        }
    }

     public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
     }

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

     public void insertRow(Object[] rowData){
         this.data.add(rowData);
         this.fireTableRowsInserted(data.size()-1, data.size()-1);
     }





public class PaneCenter extends JScrollPane implements Panelsetter {

    private static PaneCenter c;
    private static JTable kundenTabelle;
    private TableModel tm;

    private PaneCenter(){
        super();
    }

    /**@  Constructor
     * 
     *
     *
     *
     *@param arg0
     */
    public PaneCenter(Component arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public static PaneCenter getInstance(){
        if(c == null){
            c = new PaneCenter(kundenTabelle = new JTable());
        }
        return c;
    }

    public void setPanel(LinkedList<Object[]> data){
        c.setBackground(Color.GRAY);
        c.setBorder(new LineBorder(Color.black));
        c.setPreferredSize(new Dimension(500,350));
        c.setMinimumSize(new Dimension(500,350));
        c.setMaximumSize(new Dimension(500,350));
        kundenTabelle.setModel(tm = new TableModel(data));
        kundenTabelle.setAutoResizeMode(0);
        kundenTabelle.setSelectionMode(0);
    }

    public JTable getKundenTabelle() {
        return kundenTabelle;
    }

    public TableModel getTableModel(){
        return tm;
    }

    /**
     * @see interfaces.Panelsetter#setPanel()
     */
    @Override
    public void setPanel() {
        // TODO Auto-generated method stub

    }





public class Run {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Object[] aa = {"1", "2", "3", "4", "5", "1", "2", "3", "4", "5", "11"}
        PaneCenter.getInstance().setPanel(Bank.getCustomerDataArray())
        PaneCenter.getInstance().getKundenTabelle().getModel().insertRow(aa);


        Frame.getInstance().addPanels(PaneCenter.getInstance());
        Frame.getInstance().setVisible(true);

    }

}
答案

我这样做是因为LinkedList能够随时插入行作为Object []而无需替换2D数组

您不需要自定义表模型。只需使用DefaultTableModel。 DefaultTableModel将数据从2D数组复制到Vector of Vector。

然后,您可以使用insertRow(...)方法在模型中的任何位置插入一行数据。

我无法通过调用main方法中的TableModel从JTable中调用它

你真的不应该试图从main()方法调用它。主要方法应该是创建框架并向框架添加面板。创建框架的代码应负责将数据添加到表模型。

其他的建议:

  1. 不要扩展JScrollPane。您尚未更改滚动面板的功能。因此,只需创建一个滚动窗格的实例,然后将面板添加到其中。
  2. 变量名称不应以大写字符开头。
  3. 不要在你的班级中使用静态变量。

查看How to Use Tables上Swing教程中的演示代码,了解如何更好地构建代码以解决主要问题以及所有其他较小问题的示例。

这是一项大学任务,它说“......使用抽象数据模型......”

然后,您通常会使用ArrayList来保存数据,您可以直接插入所需的数据。

以上是关于如何在abstractTableModel中获取自己的方法?的主要内容,如果未能解决你的问题,请参考以下文章

swing_AbstractTableModel 创建表格

QTableView中单元格内容居中对齐

一起使用 TableCellRenderer 和 getColumnClass

如何在react中获取自定义属性的值

如何在 Wordpress 编辑器中添加自定义字段并获取其值?

如何在 Flex 中获取自定义组件的句柄?