IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Probleme de redimensionnement de taille de colonne d'une jtable


Sujet :

Composants Java

  1. #1
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut Probleme de redimensionnement de taille de colonne d'une jtable
    Bonjour,

    voilà j'ai un souci. je ne comprends pas pourquoi mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    table.getColumnModel().getColumn(0).setPreferedWith(70);
    table.getColumnModel().getColumn(0).setMaxWidth(70);
    table.getColumnModel().getColumn(0).setMinWidth(70);
    ne change rien à mes tailles de colonne de ma jtable et j'aimerais pouvoir agrandir la taille de mes colonnes comment puis je faire ?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Personne a de solutions ?

  3. #3
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Je pète un plomb je n'y comprends rien.
    Rien ne se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    	void setColumnSize()
    	{
    		FontMetrics fm = table.getFontMetrics(table.getFont());
    		for(int i = 0 ; i < table.getColumnCount() ; i++ )
    		{
    			int max = 0 ;
    			for(int j = 0 ; j < table.getRowCount() ; j++ )
    			{
    				int taille = fm.stringWidth((String)table.getValueAt(j,i));
    				if(taille>max)max=taille;
    			}
    			String nom = (String)table.getColumnModel().getColumn(i).getIdentifier();
    			int taille = fm.stringWidth(nom);
    			if(taille>max)
    			{
    				max = taille ;
    			}
    			table.getColumnModel().getColumn(i).setPreferredWidth(max+50);
    			table.getColumnModel().getColumn(i).setMaxWidth(max+50);
    			table.getColumnModel().getColumn(i).setMinWidth(max+50);
    		}
    	}
    Au secours !!!

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    pour te l'avouer, ca fait bien longtemps que je n'utilise plus la JTree et la JTable. les composants de swingx : JXtree, JXTable et surtout JXTreeTable sont plus complets et fonctionnels.
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Empêcher la JTable de redimensionner automatiquement ses colonnes, peut être?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    Sinon aggrapdir l'espace destiné à ta JTable dans ton interface, fais donc voir dans quoi elleest placée...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    J'ai trouvé comment redimensionner deja chaque colonne.
    Se que j'en ai compris c que nous avons une taille maximale et que nous pouvons changer que l'espace interne et non agrandir le pourtour ( tout du moin actuellement avec la fonction que j'ai faite )

    Voici le code pour ceux sa interesse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (int i=0;i<vsize.length;i++)
    	      {
    	          table.getColumnModel().getColumn(i).setPreferredWidth(vsize[i]);
    	      }
     
     
     
    	private int [] vsize = {40,40,50,30,150,80,40};
    Je vais arreter le redimensionnement automatique aussi merci pour l'info sinok.
    Et sinon sinok, oui j'aimerais agrandir l'espace dans lequel elle est place Comment pourrais faire ?

    Voici le code de ma table et de mon modele

    Ma table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    package appli.Interfaces.Historique;
     
     
    import appli.Systeme.Flux;
    import javax.swing.*;
    import java.awt.Color;
     
     
     
    public class Historique extends JPanel
    {
    	public Historique()
    	{	
    		table=new JTable();
    		des = new Flux();
    		model=new DataFileTableModel(des.NomFichier());
    		table.setModel(model);
     
    		table.createDefaultColumnsFromModel();
    		JScrollPane scrollPane = new JScrollPane(table);
    		this.add(scrollPane);
    		this.setBackground(Color.yellow);
    		 for (int i=0;i<vsize.length;i++)
    	      {
    	          table.getColumnModel().getColumn(i).setPreferredWidth(vsize[i]);
    	      }
    	}
     
     
    	private int [] vsize = {40,40,50,30,150,80,40};
    	public JTable table;
    	private DataFileTableModel model;
    	private Flux des;
     
    	private static final long serialVersionUID=42L;	//sérialisation
    }
    Mon modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    package appli.Interfaces.Historique;
     
    import java.util.Vector;
    import java.io.*;
    import java.util.*;
    import javax.swing.table.AbstractTableModel;
     
     
     
     
    public class DataFileTableModel extends AbstractTableModel
    {
    	private static final long serialVersionUID=42L;
     
    	static protected Vector <String> data;	//données
    	//static protected Vector<String>data=new Vector<String>();
    	static protected Vector columnNames;	//noms de colonnes
    	static protected String datafile;	//nom du fichier de données
    	public boolean finScrutation=false;
     
    	public DataFileTableModel(String f)
    	{
    		datafile=f;
    		initVectors();	
    		Thread thMAJ = new Thread()
    		{
    			public void run()
    			{
    				MAJ();
    			}
    		};
    		thMAJ.start();
     
    	}
     
    	public static void initVectors()
    	{
    		String aligne;
    		data=new Vector<String>();
     
    	//	columnNames=new Vector();
    		try
    		{
    			FileInputStream fin = new FileInputStream(datafile);
    			BufferedReader br = new BufferedReader(new InputStreamReader(fin));
    			while((aligne=br.readLine())!=null)
    			{
    				StringTokenizer st2 = new StringTokenizer(aligne,";");
    				while(st2.hasMoreTokens()) data.addElement(st2.nextToken());
    			}
    			br.close();
    			fin.close();
    		}
    		catch(Exception e){ e.printStackTrace();}
    	}
     
    	public int getColumnCount()
    	{
    		String[] columnNames= {"Arrivée","Appel","Camions","Quais","Observations","Déchargement","Priorité"};
    		return columnNames.length;
    	}
     
    	public int getRowCount()
    	{	
    		return data.size()/getColumnCount();
    	}
     
    	public String getColumnName(int columnIndex)
    	{
    		String[] columnNames= {"Arrivée","Appel","Camions","Quais","Observations","Déchargement","Priorité"};
            return columnNames[columnIndex];
    	}
     
    	public boolean isCellEditable(int rowIndex,int columnIndex)
    	{
    		return false;
    	}
     
    	public Object getValueAt(int rowIndex,int columnIndex)
    	{	
     
    		return (String)data.elementAt((rowIndex*getColumnCount())+columnIndex);
    	}
     
    	public void MAJ()
    	{
    		while(!finScrutation)
    		{
    			try
    			{
    				fireTableDataChanged();
    				Thread.sleep(1000);
    			}catch(Exception e)
    			{
    				System.exit(1);
    			}		
    		}
    	}
     
    	/*
    	 * Specification de la reaction lors de modification du contenu des cellules 
    	 * effectues par l'utilisateur  
    	 */
    	public void setValueAt(Object aValue,int rowIndex,int columnIndex)
    	{
     
    	}
     
    }

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Passes ton composant Historique en BorderLayout: le JScrollPane se dimensionnera automatiquement en fonction de la taille Historique, ensuite tout dépend dans quel layout est placé ton historique

    Pour changer de layout utilises la méthode setLayout de ton JPanel (qui par défaut est en FLowLayout)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Mais comment pouvons avoir le panel total pris par l'historique ?
    J'herite du jpanel car j'utilse un jdesktoppane pour une IHM multifenetre.

  9. #9
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    En fait avec ta technique sinok sa marche bien et sa prend tout fenetre.

    Pour se faire j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
        super(new BorderLayout);
        this.add(scrollPane,BorderLayout.CENTER);
    Pour ceux que sa interesse.

    Sinon j'ai un souci a cause de ceci est que je ne comprends pas directement c'est que maintenant mon

    this.setBackground(Color.yellow);

    ne marche plus. Pourriez vous dire pourquoi ?

  10. #10
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Le this correspond à quoi?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  11. #11
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    le this correspond à mon objet historiqueTemp normalement.
    J'ai manipuler les couleurs pour ma table.

    Donc

    table.setbackground(Color.yellow);// par exemple

    J'arrive a changer la couleur du texte

    Mais pour le panel qui comporte le composant jtable, je n'y arrive pas.
    Donc pour résumer,

    comment mettre un arriere plan de couleur ?
    pouvons nous mettre une image en fond ?
    comment pouvons nous reperer le numero de lignes
    afin de pouvoir mettre deux couleurs differentes sur deux lignes
    pour une meilleure visibilite ?

    Merci d'avance

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Cadeau:

    http://elliotth.blogspot.com/2004/09...in-jtable.html

    Et puis par la même occasion, renseignes toi sur les Renderers et Editors:

    http://java.sun.com/docs/books/tutor...tml#editrender
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  13. #13
    Expert confirmé
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Points : 4 883
    Points
    4 883
    Par défaut
    Et bien je te remercie sinok, je vais me debrouiller avec ca.
    Au pire je reposterais si j'ai de difficultés.

    Peut être à mon prochain post qui sera la récupération de la valeur d'une cellule editer.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2012, 10h53
  2. Réponses: 5
    Dernier message: 22/01/2012, 20h03
  3. Réponses: 3
    Dernier message: 28/10/2010, 10h58
  4. Fixer la taille des colonnes d'une QTextTable
    Par Somato dans le forum Débuter
    Réponses: 2
    Dernier message: 19/11/2008, 22h08
  5. Réponses: 2
    Dernier message: 23/03/2007, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo