Here I don't understand of how TableModel is working..? I have read @pbl's tutorial about JTable, but still didn't understand.. If to create a simple and static Table (that not dynamic) then no problem.. But I want to create a dynamic Table that the value can change after have user update through a input TextField or the Table only show some column that user want to see..
From the ebook and the tutorial of pbl's I got that, If want a dynamic one then you need to custom a TableModel, by creating an abstract class that extends AbstractTableModel. What I understood of this are : I create a new custom Model and I overwrite some the method so that the method do a specific job that I want.
In tutorial, in this custom model, the number of columns and column's name is pre-define. What I want is it was define by is user choices. E.g.: When user only need column A and C (click a button) then the table only show column A and C, when user need column B, D, and E (click a button) then the Table show column B, D, and E.
Not only that, in tutorial, each rows value is also pre-define. I want the value of each rows came from Database's ResultSet query. so I need a simple method to input each query into Table.
So in my mind I need at least two new method to do what I want. SO I tried to make it. and the result is :
Please examine this simple code, can give me any advices or any correction.... If possible give me explanation so that I can understand of how this JTable works.. thanks
From the ebook and the tutorial of pbl's I got that, If want a dynamic one then you need to custom a TableModel, by creating an abstract class that extends AbstractTableModel. What I understood of this are : I create a new custom Model and I overwrite some the method so that the method do a specific job that I want.
In tutorial, in this custom model, the number of columns and column's name is pre-define. What I want is it was define by is user choices. E.g.: When user only need column A and C (click a button) then the table only show column A and C, when user need column B, D, and E (click a button) then the Table show column B, D, and E.
Not only that, in tutorial, each rows value is also pre-define. I want the value of each rows came from Database's ResultSet query. so I need a simple method to input each query into Table.
So in my mind I need at least two new method to do what I want. SO I tried to make it. and the result is :
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
public class TestTable extends JFrame{
JTable aTable;
public static void main(String[] args) {
//Scanner in = new Scanner(System.in);
TestTable aTest = new TestTable();
}
public TestTable(){
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
MyTableModel myModel = new MyTableModel();
String[] columnNames = {"A", "B"};
myModel.setColumns(columnNames);
Object[] rowDatas = {"Test", new Integer(10)};
myModel.setRowDatas(rowDatas);
aTable = new JTable(myModel);
JScrollPane scrollPane = new JScrollPane(aTable);
add(scrollPane);
revalidate();
}
}
class MyTableModel extends AbstractTableModel{
ArrayList<Object[]> rowData = new ArrayList<>();
String[] columnName;
@Override
public int getRowCount() {
return rowData.size();
}
@Override
public int getColumnCount() {
return columnName.length;
}
@Override
public String getColumnName(int col){
return columnName[col];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return rowData.get(rowIndex)[columnIndex];
}
public void setColumns(String[] columnName){
this.columnName = columnName;
}
public void setRowDatas(Object[] datas){
this.rowData.add(datas);
}
}
Please examine this simple code, can give me any advices or any correction.... If possible give me explanation so that I can understand of how this JTable works.. thanks