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.*;
/**
*
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é
+++
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.