Re: Java Exception from inside
// Any idea what casses the Exception to boil up ?
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class SimpleTable extends JTable
{
private int columnLength=0; //number of rows
private int columns=0;
private MyTableModel myTableModel=new MyTableModel();
public SimpleTable()
{
super();
this.setModel(myTableModel);
this.getTableHeader().setReorderingAllowed(false);
this.getTableHeader().setResizingAllowed(false);
}
public void addColumn(String headerText)
{
LineBorder lineBorder= new LineBorder(Color.BLACK,4,false);
addColumn(new CellContent
(null,null,null,JLabel.CENTER,lineBorder,headerText));
}
public void addColumn(Color bgcolor,Color color,Font font,int
align,LineBorder lineBorder,String value )
{
addColumn(new CellContent
(bgcolor,color,font,align,lineBorder,value));
}
public void addColumn(CellContent content)
{
columns++;
TableColumn column = new TableColumn();
this.getColumnModel().addColumn(column);
MyTableRenderer myHeadRenderer=new MyTableRenderer(content);
column.setHeaderRenderer(myHeadRenderer);
}
public void addRow()
{
//Vector<String> stringVector = new Vector<String>();
Vector<CellContent> rowData = new Vector<CellContent>() ;
rowData.add (new CellContent()) ;
rowData.add (new CellContent()) ;
rowData.add (new CellContent()) ;
myTableModel.addRow(rowData) ;
// getModel().addRow(new Object[]{"v1", "v2", "v3"});
// addRows(1);
}
public void addRows(int number_of_rows)
{
for (int i=0;i<number_of_rows;i++)
{
columnLength++;
CellContent[] content=new CellContent[columns];
for (int column=0;column<columns;column++) content[column]=new
CellContent(); // default empty strings
myTableModel.addRow(content);
}
}
// Innerclass
private class MyTableModel extends DefaultTableModel
{
public MyTableModel()
{
super();
}
// when isCellEditable(int row,int column) returns false
// then the cell is not editable
// change code below if you want otherwise.
public boolean isCellEditable(int row,int column)
{
return false;
}
}
// Innerclass
// The renderer processes information for layout
// In here it is made an innerclass and hidden to outside to make
SimpleTable
// more easier to understand as JTable
private class MyTableRenderer extends JLabel implements
TableCellRenderer
{
public MyTableRenderer()
{
super();
setOpaque(true); // background must show
}
public MyTableRenderer(CellContent content)
{
super();
setOpaque(true); // background must show
this.setBackground(content.getBackground());
this.setForeground(content.getForeground());
this.setFont(content.getFont());
this.setHorizontalAlignment(content.getHorizontalAlignment());
if (content.getLineBorder()!=null) this.setBorder
(content.getLineBorder());
this.setText(content.getValue());
}
public Component getTableCellRendererComponent( JTable table,
Object cellContent,
boolean isSelected,
boolean hasFocus,
int row,
int
column)
{
if (cellContent==null) return this;
CellContent content=(CellContent)cellContent; // We only cast
one time to speed up.
this.setBackground(content.getBackground());
this.setForeground(content.getForeground());
this.setFont(content.getFont());
this.setHorizontalAlignment(content.getHorizontalAlignment());
if (content.getLineBorder()!=null) { this.setBorder
(content.getLineBorder()); }
this.setText(content.getValue());
return this;
}
}
// innerclass CellContent
// holds all information concering the cell
// such as colors fonts alginment.
// and a boolean that determines if the cell should be editable
// Also a value (reprecented as String)
// (It is parsed by myTableRendere)
private class CellContent
{
private Color bgcolor=Color.WHITE; // background color
private Color color =Color.BLACK; // foreground color
private Font font =new Font(Font.MONOSPACED,Font.PLAIN,12);
private int alignment=JLabel.LEFT; // default alignment is left
private LineBorder lineBorder=null;
private String value ="";
public CellContent() {}
public CellContent(Color bgcolor,Color color,Font font,int
alignment,LineBorder lineBorder,String value )
{
if (bgcolor!=null) { this.bgcolor=bgcolor; }
if (color!=null) { this.color=color; }
if (font!=null) { this.font=font;}
this.alignment=alignment;
if (lineBorder!=null) {this.lineBorder=lineBorder;}
if (value!=null) { this.value=value;}
}
public Color getBackground() { return bgcolor; }
public Color getForeground() { return color; }
public Font getFont() { return font; }
public int getHorizontalAlignment() { return alignment; }
public LineBorder getLineBorder() { return lineBorder; }
public String getValue() { return value; }
public void setBackground(Color bgcolor) { this.bgcolor=bgcolor; }
public void setForeground(Color color) { this.color=color; }
public void setFont(Font font) { this.font=font; }
public void setHorizontalAlignment(int alignment)
{ this.alignment=alignment; }
public void setLineBorder(LineBorder lineBorder)
{ this.lineBorder=lineBorder;}
public void setValue(String value) { this.value=value; }
}
public static void main(String[] args)
{
SimpleTable simpleTable=new SimpleTable();
simpleTable.addColumn("Column 1");
LineBorder lineBorder= new LineBorder(Color.GREEN,2,true); //
rounded
simpleTable.addColumn(Color.YELLOW,Color.GREEN,new Font
(Font.SERIF,Font.BOLD,16),JLabel.LEFT,lineBorder,"Column 2");
simpleTable.addColumn("Column 3");
simpleTable.addRow();
// simpleTable.addRows(5);
// simpleTable.setColumnAlign(0);
JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JScrollPane jscrollPane=new JScrollPane(simpleTable);
frame.getContentPane().add(jscrollPane,BorderLayout.CENTER);
frame.pack();
frame.setExtendedState(frame.getExtendedState()|
JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
// TODO, add your application code
System.out.println("Hello World!");
}
}