开发者

Populating Empty Tables in Java Swing

I would like to have a JFrame window with an initial empty table of say, 10 columns. An action event gener开发者_开发问答ated by a mouse click should then populate the table with a list of 10 or less items, the leaving the used rows of the table empty. How should this be done?


I'd recommend defining your own TableModel implementation by subclassing AbstractTableModel. That way you can "back" your model with any suitable collection (e.g. java.util.List). When an ActionEvent is fired you would typically amend your underlying collection and then fire a TableModelEvent to cause the JTable to be repainted.


For this, you should create a DefaultTableModel with the data you want, and for the blank lines, you fill the object table with null values.

It´s simpler with some code:

As I don't know where you data come from, I'll presume it come from a matrix with less than 10 rows:

String data[][] = {{"a","b"}, {"c","d"}};

you have to create a new matrix with your previous data and the null cells for completion of the table. In the end You'll have something like this.

Object data2[][] = {{"a","b"}, 
{"c","d"}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}};

This way you'll have a 10x2 matrix that will fill your table. Now you can update your DefaultTableModel

yourTable.setModel(
        new DefaultTableModel(data2, new String [] {"Column1Title", "Cloumn2Title"}) {
        Class[] types = new Class[] {String.class,String.class}; 
        boolean[] canEdit = new boolean[] {true, true};
        @Override
        public Class getColumnClass(int columnIndex){ return types [columnIndex];}
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex){ return canEdit [columnIndex];}
});

And that's it. I presume you don't have problems to create your Object matrix.


Besides creating your own TableModel as explained by Adamski, you can use the javax.swing.table.DefaultTableModel directly.
It has a constructor which takes the number of columns and rows as argument and methods to manage the data (addRow, insertRow, setDataAt, ...).

I would prefer creating an own TableModel, unless it's for a very simple program/functionality.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜