Dúvida JTable

7 respostas
M

Pessoas..please...gostaria de saber duas coisas:

Como mesclar células;
Como deixar uma celula em Negrito, Itálico, Sublinhado

abaixo está meu código fonte da classe correspondente a tabela....

import javax.swing.*;
import javax.swing.table.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;
import java.text.DecimalFormat;

public class imprimeRelatorio extends JFrame{
	
	JLabel lTitulo;
	
	Connection connection;
	
	DecimalFormat duasCasas = new DecimalFormat("###,##0.00");
	
	double dFunilaria,dPintura,dTapecaria,dEletrica,dMecanica,dTerceiros,dOutros,dPecas,dSubTotal,dFranquia,dDesconto,dSubtotal,dTotal;
	
	DefaultComboBoxModel modelo = new DefaultComboBoxModel();
	JComboBox cRelatorios = new JComboBox(modelo);   
	
	String relatorioSelecionado="";
	
	DefaultTableModel modeloTabela;
	JTable tabela;
	
	Container caixa = getContentPane();

	public imprimeRelatorio(){
		caixa.setLayout(new FlowLayout());
		
		String[] colunas = new String []{"nf","placa","veiculo","seguradora","fun","pint","tap","ele","mec","terc","out","pecas","subtotal","franquia","desconto","total"};
		String[][] dados = new String [][] {
			{"NF","PLACA","VEICULO","SEGURADORA","FUN","PIN","TAP","ELE","MEC","TERC","OUT","PECAS","SUBTOTAL","FRANQUIA","DESCONTO","TOTAL"},
		};
		
		//Configuração da Tabela
		modeloTabela = new DefaultTableModel(dados,colunas);
		tabela = new JTable(modeloTabela);
		tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		tabela.setEnabled(false); 
		tabela.setGridColor(Color.black);
		
		//Centralização dos dados nas Células.
		DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) tabela.getDefaultRenderer(JLabel.class);
		renderer.setHorizontalAlignment(SwingConstants.CENTER);
		
		//Configuração de tamanho das Colunas
		tabela.getColumnModel().getColumn(0).setPreferredWidth(40);//Coluna NF
		tabela.getColumnModel().getColumn(1).setPreferredWidth(65);//Coluna Placa
		tabela.getColumnModel().getColumn(3).setPreferredWidth(100);//Coluna Seguradora
		tabela.getColumnModel().getColumn(4).setPreferredWidth(65);//Coluna Funilaria
		tabela.getColumnModel().getColumn(5).setPreferredWidth(65);//Coluna Pintura
		tabela.getColumnModel().getColumn(6).setPreferredWidth(65);//Coluna Tapeçaria
		tabela.getColumnModel().getColumn(7).setPreferredWidth(65);//Coluna Eletrica
		tabela.getColumnModel().getColumn(8).setPreferredWidth(65);//Coluna Mecanica
		tabela.getColumnModel().getColumn(9).setPreferredWidth(65);//Coluna Terceiros
		tabela.getColumnModel().getColumn(10).setPreferredWidth(65);//Coluna Outros
		
		caixa.add(cRelatorios);
		
		verificarRelatorios();
	
		setVisible(true);
		setTitle("Impressão de Relatório");
		setSize(1130,600);
		setLocationRelativeTo(null);
	}
	
	public static void main(String args[]){
		imprimeRelatorio imprime = new imprimeRelatorio();
		imprime.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public void abrirConexao(){
		try{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			String url = "jdbc:odbc:ControleInterno";
			connection = DriverManager.getConnection(url,"","");
		} 
		catch(ClassNotFoundException cnfex){
			System.err.println("Falha ao carregar o JDBC/ODBC driver.");
			System.exit(0);
		}
		catch(SQLException ex){
			System.out.println("SQLException: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("VendorError: " + ex.getErrorCode());
		}
	}
	
	public void verificarRelatorios(){
		abrirConexao();
		try{
			Statement stm = connection.createStatement();
		
			String sql = "SELECT mes FROM relatorios WHERE fechado=false";
			
			ResultSet rs = stm.executeQuery(sql);
			
			modelo.addElement("Selecione");
			while(rs.next()){
				modelo.addElement(rs.getString("mes"));
			}
		}
		catch (SQLException e){
			JOptionPane.showMessageDialog(null,"Erro. Não foi possível conectar ao Banco de Dados.\nContate o administrador do sistema.");
			e.printStackTrace();
		}
		finally{
			try{
				connection.close();
			}
			catch(SQLException onConClose){
				JOptionPane.showMessageDialog(null,"Erro. Houve um problema no fechamendo da conexão do Banco de Dados.\nContate o Administrador do sistema.");
				onConClose.printStackTrace();
			}
		}
		cRelatorios.addActionListener(   
			new ActionListener() {   
				public void actionPerformed(ActionEvent e) {   
					relatorioSelecionado =""+cRelatorios.getSelectedItem();
					lTitulo = new JLabel("Grid Racing Team - Relatório de "+relatorioSelecionado);
					lTitulo.setFont(new Font("Garamond",Font.BOLD,40));
					caixa.add(lTitulo);
					lTitulo.setVisible(false);
					geraTabela();
        		}   
    		}
		);
	}
	
	public void geraTabela(){
		abrirConexao();
		try{
			Statement stm = connection.createStatement();
						
			String sqlSomas = "SELECT fun,pin,tap,ele,mec,terc,out,pecas,subtotal,franquia,desconto,total FROM "+relatorioSelecionado;
			ResultSet rsSomas = stm.executeQuery(sqlSomas);
			while(rsSomas.next()){
				dFunilaria+=rsSomas.getDouble("fun");
				dPintura+=rsSomas.getDouble("pin");
				dTapecaria+=rsSomas.getDouble("tap");
				dEletrica+=rsSomas.getDouble("ele");
				dMecanica+=rsSomas.getDouble("mec");
				dTerceiros+=rsSomas.getDouble("terc");
				dOutros+=rsSomas.getDouble("out");
				dPecas+=rsSomas.getDouble("pecas");
				dSubtotal+=rsSomas.getDouble("subtotal");
				dFranquia+=rsSomas.getDouble("franquia");
				dDesconto+=rsSomas.getDouble("desconto");
				dTotal+=rsSomas.getDouble("total");
			}
			
			String sql = "SELECT * FROM "+relatorioSelecionado;
			ResultSet rs = stm.executeQuery(sql);
			
			while(rs.next()){
				modeloTabela.addRow(new String[]{""+rs.getInt("nf"),
													rs.getString("placa"),
													rs.getString("veiculo"),
													rs.getString("seguradora"),
													""+duasCasas.format(rs.getDouble("fun")),
													""+duasCasas.format(rs.getDouble("pin")),
													""+duasCasas.format(rs.getDouble("tap")),
													""+duasCasas.format(rs.getDouble("ele")),
													""+duasCasas.format(rs.getDouble("mec")),
													""+duasCasas.format(rs.getDouble("terc")),
													""+duasCasas.format(rs.getDouble("out")),
													""+duasCasas.format(rs.getDouble("pecas")),
													""+duasCasas.format(rs.getDouble("subtotal")),
													""+duasCasas.format(rs.getDouble("franquia")),
													""+duasCasas.format(rs.getDouble("desconto")),
													""+duasCasas.format(rs.getDouble("total"))
													}
											);
			}

			modeloTabela.addRow(new String[]{"","","","","","","","","","","","","","","",""});
			
			modeloTabela.addRow(new String[]{"",
														"",
														"",
														"",
														""+duasCasas.format(dFunilaria),
														""+duasCasas.format(dPintura),
														""+duasCasas.format(dTapecaria),
														""+duasCasas.format(dEletrica),
														""+duasCasas.format(dMecanica),
														""+duasCasas.format(dTerceiros),
														""+duasCasas.format(dOutros),
														""+duasCasas.format(dPecas),
														""+duasCasas.format(dSubtotal),
														""+duasCasas.format(dFranquia),
														""+duasCasas.format(dDesconto),
														""+duasCasas.format(dTotal)
														}
										);
			cRelatorios.setVisible(false);
			lTitulo.setVisible(true);
			caixa.add(tabela);
		}
		catch (SQLException e){
			JOptionPane.showMessageDialog(null,"Erro. Não foi possível conectar ao Banco de Dados.\nContate o administrador do sistema.");
			e.printStackTrace();
		}
		finally{
			try{
				connection.close();
			}
			catch(SQLException onConClose){
				JOptionPane.showMessageDialog(null,"Erro. Houve um problema no fechamendo da conexão do Banco de Dados.\nContate o Administrador do sistema.");
				onConClose.printStackTrace();
			}
		}
	}
}

Fico no aguardo....

7 Respostas

Fernando_Generoso_da

Dá uma olhada em renderer, nesse link:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Fernando Rosa

M

cara…sinceramente> o esquema é bem completo mas, não consegui achar nda sobre negrito…não tem nenhum exemplo básico de código?

falow

victor.godinho

[url]http://quicktable.org/jtable/quicktablemain.htm[/url]

public class MultipleRowHeaderExample extends JFrame {
  Object[][] data;
  Object[] column;
  JTable table;
  MultiSpanCellTable fixedTable;

  public MultipleRowHeaderExample() {
    super( "Multiple Row Header Example" );
    setSize( 400, 150 );
    
    data =  new Object[][]{
        {"SNo."    ,"" },
        {"Name"    ,"1"},
        {""        ,"2"},
        {"Language","1"},
        {""        ,"2"},
        {""        ,"3"}};
    column = new Object[]{"",""};
    
    AttributiveCellTableModel fixedModel = new AttributiveCellTableModel(data, column) {
      public boolean CellEditable(int row, int col) { 
        return false; 
      }
    };
        
    CellSpan cellAtt =(CellSpan)fixedModel.getCellAttribute();
    cellAtt.combine(new int[] {0}    ,new int[] {0,1});
    cellAtt.combine(new int[] {1,2}  ,new int[] {0});
    cellAtt.combine(new int[] {3,4,5},new int[] {0});
    
    DefaultTableModel    model = new DefaultTableModel(data.length, 3);
        
    fixedTable = new MultiSpanCellTable( fixedModel );
    table = new JTable( model );
    fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    fixedTable.setDefaultRenderer(Object.class, new RowHeaderRenderer(fixedTable));
    fixedTable.setGridColor(table.getTableHeader().getBackground());
    
    JScrollPane scroll = new JScrollPane( table );
    JViewport viewport = new JViewport();
    viewport.setView(fixedTable);
    viewport.setPreferredSize(fixedTable.getPreferredSize());
    scroll.setRowHeaderView(viewport);
    
    getContentPane().add(scroll, BorderLayout.CENTER);
  }

  public static void main(String[] args) {
    MultipleRowHeaderExample frame = new MultipleRowHeaderExample();
    frame.addWindowListener( new WindowAdapter() {
      public void windowClosing( WindowEvent e ) {
        System.exit(0);
      }
    });
    frame.setVisible(true);
  }

  
  class RowHeaderRenderer extends JLabel implements TableCellRenderer {  
    RowHeaderRenderer(JTable table) {
      JTableHeader header = table.getTableHeader();
      setOpaque(true);
      setBorder(UIManager.getBorder("TableHeader.cellBorder"));
      setHorizontalAlignment(CENTER);
      setForeground(header.getForeground());
      setBackground(header.getBackground());
      setFont(header.getFont());
    }
  
    public Component getTableCellRendererComponent(JTable table, Object value,
                          boolean isSelected, boolean hasFocus, int row, int column) {
      setText((value == null) ? "" : value.toString());
      return this;
    }
  }
  
}
victor.godinho

E agora para negrito/itálico/… :

JLabel l = new JLabel(); l.setText("<html><i>italics</i> <b>bold</b> <u>underline</u></html>");

M

desculpa galera mas, sou recente em JTable…não consigo ver ai aonde q eu configuro a fonte da célula…

se alguém puder explicar, passo-a-passo…

valeu!!!

M

alguém, por favor…só tá faltando isso pra eu concluir meu projeto da faculdade…

Fernando_Generoso_da

Faça um renderer dessa forma:

public class TesteRenderer extends DefaultTableCellRenderer {

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
	        boolean isSelected, boolean hasFocus, int row, int column) {
		super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
		        row, column);
		setFont(getFont().deriveFont(Font.BOLD));

		return this;
	}

}

depois, defina esse renderer como o renderer da tua célula que tu quer como negrito, ou qualquer outra configuração.

Fernando

Criado 7 de agosto de 2008
Ultima resposta 8 de ago. de 2008
Respostas 7
Participantes 3