Jtable avec model de rendue de cellule (header sur plusieur lignes)...

Description

Je vien de faire ce code en reponce a la question de lynouille ;o)
il permet de faire une JTable avec une entete de plusieur ligne ... ;o)
biensur c un exemple rapide il faut le retravailer et l adapter a son propre code evidement...

mais je pense qu il donne une bonne idee du fonctionnement ded rendu de la JTable

Source / Exemple :


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

/**

  • @author ludo
*
  • /
public class FrmTable extends JFrame { JTable tblProcess = null; public FrmTable() { super( "exemple de table" ); setBounds( 100, 100, 500, 500 ); JTable lst = new JTable(); TableModelNoEditable tmne = new TableModelNoEditable(); tblProcess = new JTable(); tblProcess.setModel( tmne ); { tmne.addColumn( "Nom" ); tmne.addColumn( "Créateur\nludo" ); tmne.addColumn( "Type\npas bo" ); tmne.addColumn( "Etat" ); Object[] vals = { "ma game", "moi", "Othello", "demarrer" }; tmne.addRow( vals ); tmne.addRow( vals ); tmne.addRow( vals ); } TableCellRenderer tbc = getTableCellRenderer(); TableCellRenderer tbch = getTableHeaderRenderer(); tblProcess.getTableHeader().setReorderingAllowed( false ); ///////////////////////////////////////////////////////// // lignes a metre en comment pour retrouver le comportement de la table par defau for (int i = 0; i < tmne.getColumnCount(); i++) { TableColumn tc = tblProcess.getColumnModel().getColumn( i ); tc.setCellRenderer( tbc ); tc.setHeaderRenderer( tbch ); } ////////////////////////////////////////////////////////// JScrollPane sclp = new JScrollPane(); sclp.getViewport().add( tblProcess ); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { super.windowClosing(e); System.exit( 0 ); } }); getContentPane().setLayout( new BorderLayout() ); getContentPane().add( sclp, BorderLayout.CENTER ); } public static void main(String[] args) { new FrmTable().setVisible( true ); } // permet de controler la possibilieter dedition // de n importe kel cellule : la on interdit tout class TableModelNoEditable extends DefaultTableModel { public boolean isCellEditable(int row, int col) { return false;} } private static TableCellRenderer label = null; public static TableCellRenderer getTableCellRenderer() { if ( label == null ) label = new TableGameRenderer(); return label; } static class TableGameRenderer extends JLabel implements TableCellRenderer { public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setForeground(Color.black); Font font = table.getFont(); setOpaque(true); if (isSelected) font = new Font(font.getName(), Font.BOLD | Font.ITALIC, font.getSize()); else font = new Font(font.getName(), Font.PLAIN, font.getSize()); setFont(font); setHorizontalAlignment(JLabel.CENTER); setText((String) value); return this; } } public static TableCellRenderer getTableHeaderRenderer() { return new TableCellRenderer() { public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // JLabel lbl = new JLabel(); JTextArea lbl = new JTextArea() { // methode a redefinir pour modifier l aspect de la cellule public void paint( Graphics g ) { super.paint( g ); } }; // lbl.setHorizontalAlignment( JLabel.CENTER ); Font font = table.getFont(); lbl.setOpaque( true ); font = new Font( font.getName(), Font.BOLD, font.getSize() + 2 ); lbl.setFont( font ); lbl.setForeground( Color.black ); lbl.setText( (String)value ); return lbl; } }; } }

Conclusion :


les methodes static non aucune obligation de l etre ;o) c que g repri des morceau d un vieu code ;o) pas tou refai ;o) héhé

+++

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.