Java 摆动 |扩展 AbstractTableModel 并将其与 JTable 一起使用 |几个问题

2024-01-15

我遵循 Oracle 的模型来实现 AbstractTableModel

http://download.oracle.com/javase/tutorial/uiswing/examples/components/TableDemoProject/src/components/TableDemo.java http://download.oracle.com/javase/tutorial/uiswing/examples/components/TableDemoProject/src/components/TableDemo.java

我这样做是因为我的表必须包含 3 列,并且第一列必须是 JCheckBox。

这是我的代码:

public class FestplattenreinigerGraphicalUserInterfaceHomePagePanelTableModel extends AbstractTableModel {
private String[] columnNames = {"Auswahl",
                                    "Dateiname",
                                    "Pfad"};
    private Object[][] data = {
    {new Boolean(true), "datei.tmp",
     "/home/user/tmp"}
    };

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

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

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

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

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

     public boolean isCellEditable(int row, int col) {
        if (col == 0) {
            return true;
        } else {
            return false;
        }
    }

     public void setValueAt(Object value, int row, int col) {            
        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }

}

这是我的问题:

  1. JTable (new JTable(FestplattenreinigerGraphicalUserInterfaceHomePagePanelTableModel))知道列名是什么及其值是什么?因为我的 AbstractTableModel 中没有构造函数?!是因为列名和数据必须按原样命名,并且 JTable 才能访问它们吗?
  2. 如何将新值放入 JTable 中?由于列名和数据是数组。我可以用向量替换它们吗?如果是这样,我如何初始化这些向量?在 myAbsTableModel 的构造函数中?

我认为找到解决方案很容易,但是这个表处理对我来说并不简单,所以非常感谢你!


所有 Swing 组件都带有默认模型实现。我建议您在尝试创建自己的之前先了解如何使用它们。对于 JTable,它称为 DefaultTableModel。阅读 API,了解从模型动态添加/删除数据行的方法。这是一个帮助您入门的简单示例:

import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableBasic extends JPanel
{
    public TableBasic()
    {
        String[] columnNames = {"Date", "String", "Integer", "Boolean"};

        Object[][] data =
        {
            {new Date(), "A", new Double(1), Boolean.TRUE },
            {new Date(), "B", new Double(2), Boolean.FALSE},
            {new Date(), "C", new Double(9), Boolean.TRUE },
            {new Date(), "D", new Double(4), Boolean.FALSE}
        };

        JTable table = new JTable(data, columnNames)
        {
            //  Returning the Class of each column will allow different
            //  renderers and editors to be used based on Class

            public Class getColumnClass(int column)
            {
                for (int row = 0; row < getRowCount(); row++)
                {
                    Object o = getValueAt(row, column);

                    if (o != null)
                        return o.getClass();
                }

                return Object.class;
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("TableBasic");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new TableBasic() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 摆动 |扩展 AbstractTableModel 并将其与 JTable 一起使用 |几个问题 的相关文章

随机推荐