/* IntMatrix.java */
package ciips.animation;
import java.io.*;
import java.awt.*;
/**
* An example implementation of the DrawingObj
interface
* that can be added to the drawingPanel (an instance of
* DrawingPanel
). Similar to ComBox
, an instance
* of this object class is added to the drawing panel by using the
* addDrawingObj
method from DrawingPanel
.
* This drawing obj can be removed from the drawing panel by invoking
* the removeObj
method.
*
* As an example, an instance of IntMatrix class can be added to
* an instance of DrawingPanel
, namely drawingPanel
* by using the following:
* It can then be removed from the drawing panel by:
* IntMatrix matrix1 = new IntMatrix(4);
* drawingPanel.addDrawingObj(matrix1);
* matrix1.setColor(....);
* matrix1.move(x, y);
* ....
*
*
* drawingPanel.removeObj(matrix1);
*
* This class implements a matrix representation with all integer entries.
* @see ComBox
* @see DrawingPanel#addDrawingObj
* @see DrawingPanel#removeObj
*/
public class IntMatrix implements DrawingObj {
int rows, columns;
int[][] elems;
/* Drawing characteristics */
int cell_size;
Font font = new Font("Courier", Font.PLAIN, 12);
//Font boxFont = new Font("Courier", Font.PLAIN, 12);
String[] rowLabels, colLabels;
String title = null;
boolean[][] highlight;
boolean[][] highlight2;
static final int horizSpace = 32;
static final int vertSpace = 17;
private Color fg, bg;
private int x, y;
/**
* Construct a matrix with the number of rows and columns specified by the
* parameters of the constructor.
* @param rows The number of rows of the new matrix.
* @param columns The number of columns of the new matrix.
*/
public IntMatrix( int rows, int columns ) {
int j, k;
this.rows = rows;
this.columns = columns;
elems = new int[rows][columns];
highlight = new boolean[rows][columns];
highlight2 = new boolean[rows][columns];
for(j=0; jdraw
method of this class.
* @param g Graphical context.
* @param x The left most position of the box.
* @param y The top most position of the box.
* @param str The text to be displayed in the box.
* @param fg Foreground color (text color) of the box.
* @param bg Background color of the box.
* @param font A fixed font, in particular size 12 plain courier.
* This font instance is passed in to avoid font initialization every
* repaint.
*/
public void drawBox(Graphics g, int x, int y, String str,
Color fg, Color bg, Font font) {
g.setColor(bg);
g.fillRect(x, y, horizSpace, vertSpace);
g.setColor(Color.black);
g.drawRect(x, y, horizSpace, vertSpace);
g.setColor(fg);
g.setFont(font);
g.drawString(str, x + 2, y + vertSpace - 4);
}
/**
* Move the matrix to the position specified with reference to the top left
* corner.
* @param x The left most position of the matrix.
* @param y The top most position of the matrix.
*/
public void move(int x, int y) {
this.x = x;
this.y = y;
}
/**
* Get the left most position of the matrix.
* @return The x-coordinate of the topleft corner of the matrix.
*/
public int getX() {
return x;
}
/**
* Get the top most position of the matrix.
* @return The y-coordinate of the topleft corner of the matrix.
*/
public int getY() {
return y;
}
/**
* Set the foreground and background color for each element of the matrix.
* The row and column labels are displayed in the inverse color mode.
* @param fg The new foreground color.
* @param bg The new background color.
*/
public void setColor(Color fg, Color bg) {
this.fg = fg;
this.bg = bg;
}
/**
* This method has to be defined to fully implement the DrawingObj
* interface. It calls the drawMatrix
method which
* draws the matrix based on the position and color previously set.
* @see IntMatrix#drawMatrix
*/
public void draw(Graphics g) {
drawMatrix(g, x, y, fg, bg);
}
/**
* This method is only called from the draw
method which
* in turn is called from the drawing panel to draw the matrix based
* on the position and color previously set.
* @param g graphical context.
* @param x The left most position of the matrix.
* @param y The top most position of the matrix.
* @param fg Foreground (text) color for each element.
* @param bg Background color for each element.
*/
public void drawMatrix(Graphics g, int x, int y, Color fg, Color bg) {
int j, k, elem;
int posnX = x, posnY = y;
// draw colLabels
if (colLabels != null && colLabels.length == columns) {
posnX += horizSpace + 2;
for (int i = 0; i < columns; i++) {
drawBox(g, posnX, posnY, colLabels[i], bg, fg, font);
posnX += horizSpace + 2;
}
}
posnX = x;
// draw rowLabels
if (rowLabels != null && rowLabels.length == rows) {
posnY += vertSpace + 2;
for (int i = 0; i < rows; i++) {
drawBox(g, posnX, posnY, rowLabels[i], bg, fg, font);
posnY += vertSpace + 2;
}
}
posnY = y + vertSpace + 2;
for(j=0;j