Olá,
Preciso fazer uma tabela, no JME, mas meu código não está funcionando.
Quero passar o cabeçalho no contrutor e adicionar as linhas com as informações com o setLinha.
Se alguém puder ajudar agradeço!!!
package jmr.ui.window;
import java.util.Vector;
import javax.microedition.lcdui.*;
public class Table extends CustomItem {
private static final int UPPER = 0;//superior
private static final int IN = 1;//em
private static final int LOWER = 2;//inferior
private String [][] linha;
private int coluna;
private int largura_table ;
private int largura ;
private int altura ;
private int location = UPPER;
private int currentX = 0;
private int currentY = 0;
private Font fonte;
private Font fonteCols;
// Traversal stuff
// indicating support of horizontal traversal internal to the CustomItem
boolean horz;
// indicating support for vertical traversal internal to the CustomItem.
boolean vert;
public Table(String title, String [] sCabecalho)
{
super(title);
coluna = sCabecalho.length;
this.linha [0] = sCabecalho;
fonte = Font.getFont( Font.FACE_MONOSPACE, Font.STYLE_PLAIN,(Font.SIZE_SMALL) ) ;
fonteCols = Font.getFont( Font.FACE_MONOSPACE, Font.STYLE_BOLD, (Font.SIZE_SMALL )) ;
largura = fonte.getHeight() + (fonteCols.getHeight() * coluna) ;
altura = fonte.getHeight()+(fonteCols.getHeight()*linha.length);
int interactionMode = getInteractionModes();
horz = ((interactionMode & CustomItem.TRAVERSE_HORIZONTAL) != 0);
vert = ((interactionMode & CustomItem.TRAVERSE_VERTICAL) != 0);
}
protected int getMinContentHeight() {
return fonte.getHeight();
}
protected int getMinContentWidth() {
return (coluna * largura) + 1;
}
protected int getPrefContentHeight(int width)
{
return (linha.length * altura) + 1;
}
protected int getPrefContentWidth(int height)
{
return (linha.length * largura) + 1;
}
protected void paint(Graphics g, int w, int h)
{
//Pinta a área do item de branco
g.setColor(255, 255, 255);
g.fillRect(0, 0, w-1, h-1);
//Pinta o cabeçalho de cinza
g.setColor(200,200, 200);
g.fillRect(0, 0, w, fonte.getHeight());
//Bordas e linhas verticais
g.setColor(0, 0, 0);
g.drawLine(0, fonte.getHeight(), w, fonte.getHeight());
for (int i = 1; i < coluna; i++)
{
g.drawLine((w/coluna)*i, 0, (w/coluna)*i, h-1);
}
g.drawRect(0, 0, w-1, h-1);
//Linhas horizontais
g.setStrokeStyle(g.DOTTED);
for (int i = 1; i < linha.length; i++)
{
g.drawLine(0, fonteCols.getHeight()+(fonte.getHeight()*(i)), w, fonteCols.getHeight() + (fonte.getHeight()*(i)));
}
//Cabeçalho
g.setFont(fonteCols);
for (int i = 1; i <= coluna; i++)
{
g.drawString (linha[0][i], ((w/coluna)/2 ) * i + ( w / coluna / 2 * (i - 1) ), fonteCols.getHeight(), Graphics.HCENTER|Graphics.BOTTOM);
}
//Desenha o restante da tabela
g.setFont(fonte);
for (int i = 1; i < linha.length; i++)
{
g.setColor(0, 0, 0);
for (int j = 0; j <= coluna; j++)
{
g.drawString(linha[i][j], ((w/coluna)/2)*j +
(w/coluna/2*(j-1)), fonteCols.getHeight() +
(fonte.getHeight()*(i+1)), Graphics.HCENTER|Graphics.BOTTOM);
}
}
}
protected boolean traverse(int dir, int viewportWidth, int viewportHeight, int[] visRect_inout)
{
if (horz && vert)
{
switch (dir)
{
case Canvas.DOWN://abaixo
if (location == UPPER) {
location = IN;
} else {
if (currentY < (linha.length - 1)) {
currentY++;
repaint(currentX * largura, (currentY - 1) * altura, largura, altura);
repaint(currentX * largura, currentY * altura, largura, altura);
} else {
location = LOWER;
return false;
}
}
break;
case Canvas.UP://acima
if (location == LOWER)
{
location = IN;
} else {
if (currentY > 0)
{
currentY--;
repaint(currentX * largura, (currentY + 1) * altura, largura, altura);
repaint(currentX * largura, currentY * altura, largura, altura);
}
else
{
location = UPPER;
return false;
}
}
break;
case Canvas.LEFT://esquerdo
if (currentX > 0) {
currentX--;
repaint((currentX + 1) * largura, currentY * altura, largura, altura);
repaint(currentX * largura, currentY * altura, largura, altura);
}
break;
case Canvas.RIGHT://direito
if (currentX < (coluna - 1)) {
currentX++;
repaint((currentX - 1) * largura, currentY * altura, largura, altura);
repaint(currentX * largura, currentY * altura, largura, altura);
}
}
} else if (horz || vert) {
switch (dir) {
case Canvas.UP:
case Canvas.LEFT:
if (location == LOWER) {
location = IN;
} else {
if (currentX > 0) {
currentX--;
repaint((currentX + 1) * largura, currentY * altura, largura, altura);
repaint(currentX * largura, currentY * altura, largura, altura);
} else if (currentY > 0) {
currentY--;
repaint(currentX * largura, (currentY + 1) * altura, largura, altura);
currentX = coluna - 1;
repaint(currentX * largura, currentY * altura, largura, altura);
} else {
location = UPPER;
return false;
}
}
break;
case Canvas.DOWN:
case Canvas.RIGHT:
if (location == UPPER) {
location = IN;
} else {
if (currentX < (coluna - 1)) {
currentX++;
repaint((currentX - 1) * largura, currentY * altura, largura, altura);
repaint(currentX * largura, currentY * altura, largura, altura);
} else if (currentY < (linha.length - 1)) {
currentY++;
repaint(currentX * largura, (currentY - 1) * altura, largura, altura);
currentX = 0;
repaint(currentX * largura, currentY * altura, largura, altura);
} else {
location = LOWER;
return false;
}
}
}
} else {
// In case of no Traversal at all: (horz|vert) == 0
}
visRect_inout[0] = currentX;
visRect_inout[1] = currentY;
visRect_inout[2] = largura;
visRect_inout[3] = altura;
return true;
}
public void setLinha(String [] text)
{
int l = linha.length;
linha[l+1] = text;
repaint();
}
}