Formatar uma jTable

:thumbup:

Editado: Tá tudo funcionando 100%.

Grande
Tenho uma jTable que consegui imprimi-la direto na impressora, mas gostaria de ter um cabeçalho em cada pagina, e configurar 20 linhas por pagina. Pode me ajudar. Segue código quando abro a Tabela, e quando imprimo.

[code]

package Relatorio;

import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.* ;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import utilitarios.conexao;
import javax.swing.text.MaskFormatter;

public class RelaContas extends javax.swing.JFrame
{

private static class jTable {

    public jTable() {
    }
}

MaskFormatter formatodatacada;
private MaskFormatter formatodata;
private MaskFormatter formatocep;
private MaskFormatter formatocnpj;
private MaskFormatter formatoie;
private MaskFormatter formatoccm;
private MaskFormatter formatoddi;
private MaskFormatter formatotelefone;

//COMANDA PRIMEIRO, PROXIMO, ANTERIOR, ULTIMO
int navega = 0 ;

//ORDENA PELO CÓDIGO
String ordenacao =“codigo”;

//ORDENA PELA DATA DE VENCIMENTO
String ordenacao1 =“datavencimento”;
String novo = “n”;

conexao contas;
private ActionListener ActionListener;

public RelaContas()
{
initComponents();
contas = new conexao();
contas.conecta();
contas.executeSQL("select * from Contas order by "+ordenacao1);
try
{
contas.executeSQL(“select * from Contas order by posicaoconta”);
preencher_jtable();
contas.executeSQL(“select * from Contas order by codigo”);
contas.resultset.last();
mostrardados();

}
catch(SQLException erro)
{
JOptionPane.showMessageDialog(null,“BANCO DE DADOS NÃO ENCONTRADO, VERIFIQUE O ERRO”);
}
}
public void mostrardados()
{
//try
{
//MOSTRA DATA NO FORMULÁRIO
Date data = new Date();
String dia = “” + data.getDate();
String mes = “” + String.valueOf(data.getMonth()+1);
String ano = “” + (1900 + data.getYear());
if (Integer.parseInt(dia)<=9)
dia = “0” + dia;
if (Integer.parseInt(mes)<=9)
mes = “0” + mes;
datacada.setText(dia+"/"+mes+"/"+ano);
datacada.setEditable(false);

//MOSTRA HORA NO FORMULÁRIO
Date hora = new Date();
String thora ="" + data.getHours();
String tminuto=""+ data.getMinutes();
String tsegundo=""+ data.getSeconds();
if (Integer.parseInt(tminuto)<=9)
tminuto = “0” + tminuto;
if (Integer.parseInt(tsegundo)<=9)
tsegundo = “0” + tsegundo;
horacada.setText(thora+":"+tminuto+":"+tsegundo);
horacada.setEditable(false);

//DESABILITA O X NO FORMULÁRIO
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

}
}

public void preencher_jtable()
{
DefaultTableCellRenderer esquerda = new DefaultTableCellRenderer();
DefaultTableCellRenderer centro = new DefaultTableCellRenderer();
DefaultTableCellRenderer direita = new DefaultTableCellRenderer();

esquerda.setHorizontalAlignment(SwingConstants.LEFT);
centro.setHorizontalAlignment(SwingConstants.CENTER);
direita.setHorizontalAlignment(SwingConstants.RIGHT);

//CODIGO
jTable.getColumnModel().getColumn(0).setCellRenderer(centro);
//DATAVENCIMENTO
jTable.getColumnModel().getColumn(1).setCellRenderer(centro);
//FORNECEDOR
jTable.getColumnModel().getColumn(2).setCellRenderer(esquerda);
//VALOR
jTable.getColumnModel().getColumn(3).setCellRenderer(direita);
//PISIÇÃO CONTA
jTable.getColumnModel().getColumn(4).setCellRenderer(esquerda);
//CODIGO DE BARRAS
jTable.getColumnModel().getColumn(5).setCellRenderer(esquerda);

//CODIGO
jTable.getColumnModel().getColumn(0).setPreferredWidth(10);
//DATA VENCIMENTO
jTable.getColumnModel().getColumn(1).setPreferredWidth(15);
//FORNECEDOR
jTable.getColumnModel().getColumn(2).setPreferredWidth(200);
//VALOR
jTable.getColumnModel().getColumn(3).setPreferredWidth(30);
//POSIÇÃO CONTA
jTable.getColumnModel().getColumn(4).setPreferredWidth(20);
//CODIGO DE BARRAS
jTable.getColumnModel().getColumn(5).setPreferredWidth(220);

DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();
modelo.setNumRows(0);
try
{
while(contas.resultset.next())
{
modelo.addRow(new Object[]
{
contas.resultset.getString(“codigo”),
contas.resultset.getString(“datavencimento”),
contas.resultset.getString(“fornecedor”),
contas.resultset.getString(“valor”),
contas.resultset.getString(“posicaoconta”),
contas.resultset.getString(“codigobarras”),
}
);
}
}
catch(SQLException erro)
{
}
}

private void btsairActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//if(javax.swing.JOptionPane.showConfirmDialog(null,“DESEJA FECHAR ESTE FORMULÁRIO ?”,“SAIR”,javax.swing.JOptionPane.YES_NO_OPTION )==0)
//this.dispose();
//new Cadastro.CadastroDeContas().show();
Object[] options =
{
“Sim”, “Não”
};
int i = JOptionPane.showOptionDialog(null,
“DESEJA FECHAR ESTE FORMULÁRIO ?”,“SAIR”,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, options[0]);
if (i == JOptionPane.YES_OPTION)
{
//System.exit(0);
this.dispose();
new Cadastro.CadastroDeContas().show();
}
}

private void btimprimirActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:

{
try
{
jTable.print();
}
catch (PrinterException ex)
{
Logger.getLogger(RelaContas.class.getName()).log(Level.SEVERE, null, ex);
}
}
DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();
modelo.setNumRows(0);
try
{
while(contas.resultset.next())
{
modelo.addRow(new Object[]
{
contas.resultset.getString(“codigo”),
contas.resultset.getString(“datavencimento”),
contas.resultset.getString(“fornecedor”),
contas.resultset.getString(“valor”),
contas.resultset.getString(“posicaoconta”),
contas.resultset.getString(“codigobarras”),
}
);
}
}
catch(SQLException erro)
{
}
this.dispose();
new Relatorio.RelaContas().show();
}

[quote=Luiz_Gustavo]Nesse trecho:
se você sabe a quantidade certa de colunas (rsmd.getColumnCount() te dá a quantidade de colunas), e a ordem em que elas serão apresentadas, você pode montar um array manualmente e passar para o model de sua tabela:[/quote]

Eu preciso saber como faço para não permitir que o usuário altere a ordem das colunas. Alguém aí faz ideia de como se faz isso?

[quote=Gustavo Zub][quote=Luiz_Gustavo]Nesse trecho:
se você sabe a quantidade certa de colunas (rsmd.getColumnCount() te dá a quantidade de colunas), e a ordem em que elas serão apresentadas, você pode montar um array manualmente e passar para o model de sua tabela:[/quote]

Eu preciso saber como faço para não permitir que o usuário altere a ordem das colunas. Alguém aí faz ideia de como se faz isso?[/quote]

Opa, já descobri…

jTable.getTableHeader().setReorderingAllowed(false); 

Boa noite a todos, nao conheco muito de java e estou trabalhando com uma jtable, estou com o seguinte problema.
Preciso alterar a largura das colunas da tabela, nao pode ser no geral para cada classe vai ser uma tabela diferente. Ex tabela cliente codigo (20), nome(50), cidade (50), telefone(50).
ja a tabela pecas codigo(20), descrição(50), quantidade(20), valor(20).
Como posso fazer isso???

desde ja agradeço pela atenção.
ja posto os codigos.

codigos da tabela.

package Extra;

import java.util.Vector;
import java.util.Comparator;
import java.util.Collections;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import javax.swing.table.JTableHeader;
import javax.swing.event.TableModelEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.InputEvent;
import javax.swing.JTable;

public class TablePrincipalModel extends DefaultTableModel implements Comparator{

protected   int         currCol;
protected   Vector      ascendCol;  // this vector stores the state (ascending or descending) of each column
protected   Integer     one         = new Integer(1);
protected   Integer     minusOne    = new Integer(-1);
protected   Vector colEditable = new Vector() ;
protected   Vector cellLocked = new Vector();

public TablePrincipalModel() {
    super();
    ascendCol = new Vector();
}
public TablePrincipalModel(Object[][] data, Object[] titles) {
    super(data,titles);
    ascendCol = new Vector();
    for (int i = 0; i < titles.length; i++)
        colEditable.add(new Boolean(false));
    
    
}

 public Class getColumnClass(int c) {
    //return getValueAt(0, c).getClass();
    
    
    //Para evitar erro de null, procurando em todos as linhas
    for (int i=0; i < this.getRowCount(); i++) {
        if (getValueAt(i, c) != null)
            return getValueAt(i, c).getClass();
    }
    //Se todas estao vazias, retornar como tipo String
    String ret = "";
    return ret.getClass();
    
} 
 
 public void limpaVectorCellNotEditable(){
    cellLocked.removeAllElements();
 }
 
 public void setColEditable(int col, boolean editable) { //Anderson criou
    colEditable.set(col, new Boolean(editable));
 }
 
 public void setCellNotEditable(int col, int row) { //FT criou
     cellLocked.add(new Cell(row,col));
 }
 
/*
 * Don't need to implement this method unless your table's
 * editable.
 */
public boolean isCellEditable(int row, int col) {
    if (cellLocked.size() > 0) {
        Cell cellTest;
        for (int i=0; i < cellLocked.size(); i ++) {
            cellTest =(Cell)cellLocked.get(i);
            if (cellTest.row == row && cellTest.col == col)
                return false;
        }
    }
    return ((Boolean)colEditable.get(col)).booleanValue();
}

/*******************************************************************
 * addColumn methods are inherited from the DefaultTableModel class.
 *******************************************************************/

public void addColumn(Object columnName) {
    super.addColumn(columnName);
    ascendCol.add(one);
    colEditable.add(new Boolean(false));
}

public void addColumn(Object columnName, Object[] columnData) {
    super.addColumn(columnName, columnData);
    ascendCol.add(one);
}

public void addColumn(Object columnName, Vector columnData) {
    super.addColumn(columnName, columnData);
    ascendCol.add(one);
}

/*****************************************************************
 * This method is the implementation of the Comparator interface.
 * It is used for sorting the rows
 *****************************************************************/
public int compare(Object v1, Object v2) {

    // the comparison is between 2 vectors, each representing a row
    // the comparison is done between 2 objects from the different rows that are in the column that is being sorted

    int ascending = ((Integer) ascendCol.get(currCol)).intValue();
    if (v1 == null && v2 == null) {
        return 0;
    } else if (v2 == null) { // Define null less than everything.
        return 1 * ascending;
    } else if (v1 == null) {
        return -1 * ascending;
    }

    Object o1 = ((Vector) v1).get(currCol);
    Object o2 = ((Vector) v2).get(currCol);

    // If both values are null, return 0.
    if (o1 == null && o2 == null) {
        return 0;
    } else if (o2 == null) { // Define null less than everything.
        return 1 * ascending;
    } else if (o1 == null) {
        return -1 * ascending;
    }

    if (o1 instanceof Number && o2 instanceof Number) {
        Number n1 = (Number) o1;
        double d1 = n1.doubleValue();
        Number n2 = (Number) o2;
        double d2 = n2.doubleValue();

        if (d1 == d2) {
            return 0;
        } else if (d1 > d2) {
            return 1 * ascending;
        } else {
            return -1 * ascending;
        }

    } else if (o1 instanceof Boolean && o2 instanceof Boolean) {
        Boolean bool1 = (Boolean) o1;
        boolean b1 = bool1.booleanValue();
        Boolean bool2 = (Boolean) o2;
        boolean b2 = bool2.booleanValue();

        if (b1 == b2) {
            return 0;
        } else if (b1) {
            return 1 * ascending;
        } else {
            return -1 * ascending;
        }

    } else {
        // default case
        if (o1 instanceof Comparable && o2 instanceof Comparable) {
            Comparable c1 = (Comparable) o1;
            Comparable c2 = (Comparable) o2; // superflous cast, no need for it!

            try {
                return c1.compareTo(c2) * ascending;
            } catch (ClassCastException cce) {
                // forget it... we'll deal with them like 2 normal objects below.
            }
        }

        String s1 = o1.toString();
        String s2 = o2.toString();
        return s1.compareTo(s2) * ascending;
    }
}

/***************************************************************************
 * This method sorts the rows using Java's Collections class.
 * After sorting, it changes the state of the column -
 * if the column was ascending, its new state is descending, and vice versa.
 ***************************************************************************/
public void sort() {
    Collections.sort(dataVector, this);
    Integer val = (Integer) ascendCol.get(currCol);
    ascendCol.remove(currCol);
    if(val.equals(one)) // change the state of the column
        ascendCol.add(currCol, minusOne);
    else
        ascendCol.add(currCol, one);
}

public void sortByColumn(int column) {
    this.currCol = column;
    sort();
    fireTableChanged(new TableModelEvent(this));
}

// Add a mouse listener to the Table to trigger a table sort
// when a column heading is clicked in the JTable.
public void addMouseListenerToHeaderInTable(JTable table) {
    final TablePrincipalModel sorter = this;
    final JTable tableView = table;
    tableView.setColumnSelectionAllowed(false);
    MouseAdapter listMouseListener = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            TableColumnModel columnModel = tableView.getColumnModel();
            int viewColumn = columnModel.getColumnIndexAtX(e.getX());
            int column = tableView.convertColumnIndexToModel(viewColumn);
            if (e.getClickCount() == 1 && column != -1) {
                int shiftPressed = e.getModifiers()&InputEvent.SHIFT_MASK;
                boolean ascending = (shiftPressed == 0);
                
                //sorter.sortByColumn(column);
                sorter.sortByColumn(column);
            }
        }
    };
    JTableHeader th = tableView.getTableHeader();
    th.addMouseListener(listMouseListener);
}

}
class Cell {
int row;
int col;
public Cell(int i_row, int i_col) {
row = i_row;
col = i_col;
}
}

Aqui eu chamo a tabela…

public class Cliente extends javax.swing.JFrame {

TablePrincipalModel tmCliente = new TablePrincipalModel(null, new String[]{"Código","Nome","Cidade","Telefone Residencial"});

// DefaultTableModel tmCliente = new DefaultTableModel(null, new String[]{“Código”,“Nome”,“Cidade”,“Telefone Residencial”});
ListSelectionModel lsmCliente;

List<Cliente_Bean> clientes;

List<Cidade_Bean> cidade;
String tipoCadastro;
private String tipo_consulta