Reputation: 143
here is code where i add table model to my table:
table = new JTable(new TerminiTableModel());
scrollPane = new JScrollPane(table);
then i made this class TerminiTableModel() and here is just a simple generated code where i want to get column cound and row count... Column count works just fine and add 3 columns to my table ("Termini", "Ime i prezime" and "Napomena"). When i add that line in getRowCount, i get error and cant even compile it... Here is code... I made search about this and just cant figure it out... :-/
public class TerminiTableModel extends AbstractTableModel implements TableModel {
protected TableModel tableModel;
private String[] columnNames = {"Termin", "Ime i prezime", "Napomena"};
private String[] data = {"7:00", "8:00", "9:00" , "10:00" , "11:00" , "12:00" };
@Override
public void addTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public Class<?> getColumnClass(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return data.length; // <<----- this line is problem
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int row, int col) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isCellEditable(int row, int col) {
if (col > 0) {
return true;
} else
return false;
}
@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void setValueAt(Object data, int row, int col) {
// TODO Auto-generated method stub
}
}
Solution is probably simple, but i need some help with this... Thank You in advance...
Upvotes: 2
Views: 1987
Reputation: 109815
EDIT based on commnets
rows in JTable is based on two Dimensional arrays, then
private String[] data = {"7:00", "8:00", "9:00" , "10:00" , "11:00" , "12:00" };
should be
private String[][] data = {{"7:00", null, null}, {"8:00", null, null},
{"9:00", null, null}, {"10:00", null, null}, {"11:00", null, null},
{"12:00", null, null}};
for defined Columns
from code
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
public class MyTable {
private JFrame frame = new JFrame("TableDemo");
private JScrollPane tableScroll = new JScrollPane();
private MyTableModel tableModel = new MyTableModel();
private JTable dialogTable = new JTable(tableModel);
public MyTable() {
dialogTable.setPreferredScrollableViewportSize(dialogTable.getPreferredSize());
tableScroll = new JScrollPane(dialogTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.add(tableScroll);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
System.out.println(dialogTable.getRowCount());
System.out.println(dialogTable.getColumnCount());
System.out.println(tableModel.getRowCount());
System.out.println(tableModel.getColumnCount());
}
private class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"Termin", "Ime i prezime", "Napomena"};
private String[][] data = {{"7:00", null, null}, {"8:00", null, null},
{"9:00", null, null}, {"10:00", null, null}, {"11:00", null, null},
{"12:00", null, null}};
@Override
public void addTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public Class<?> getColumnClass(int columnNames) {
switch (columnNames) {
case 0:
return String.class;//return Date.class;
case 1:
return String.class;//return Double.class;
case 2:
return String.class;//return Boolean.class;
default:
return String.class;
}
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return data.length; // <<----- this line is problem
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int row, int col) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isCellEditable(int row, int col) {
if (col > 0) {
return true;
} else {
return false;
}
}
@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void setValueAt(Object data, int row, int col) {
// TODO Auto-generated method stub
}
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyTable myTable = new MyTable();
}
});
}
}
Upvotes: 3
Reputation: 159754
The error caused is this:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
which is caused by not specifying the column class:
@Override
public Class<?> getColumnClass(int arg0) {
return String.class;
}
Also getValueAt
doesnt return any data. You are using a 1D array to store data, Given that JTable
data is represented in rows & columns you would need to use a 2D array.
Upvotes: 1