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 :

JButton dans un header d'une JTable


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 30
    Par défaut JButton dans un header d'une JTable
    Bonjour,

    Je souhaiterais intégrer dans les header d'une JTable un bouton avec des actions particulières.
    Je sais comment ajouter des boutons dans les cellules de mon tableau avec un editor et un renderer mais là cela parait beaucoup moins evident. Quelqu'un aurait-il une solution ?

    Merci pour votre aide.

  2. #2
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Je ne suis pas sûr que tu puisses ajouter un vrai bouton dans ton header, vu que la méthode set...Editor() n'existe pas...

    A la limite, tu pourrais dessiner toi même ton bouton dans le header et ajouter un listener pour capter un clic dans la zone où tu as dessiné...
    Moi, c'est ce que j'ai récupéré pour un JTabbedPane avec un bouton pour fermer l'onglet.

    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
     
    /**
     * A JTabbedPane which has a close ('X') icon on each tab.
     * 
     * To add a tab, use the method addTab(String, Component)
     * 
     * To have an extra icon on each tab (e.g. like in JBuilder, showing the file
     * type) use the method addTab(String, Component, Icon). Only clicking the 'X'
     * closes the tab.
     */
    public class JTabbedPaneWithCloseIcons extends JTabbedPane implements MouseListener {
     
     
    	public JTabbedPaneWithCloseIcons() {
    		super();
    		addMouseListener(this);
    	}
     
    	public void addTab(String title, Component component, Icon extraIcon) {
    		super.addTab(title, new CloseTabIcon(extraIcon), component);
    	}
     
    	public void mouseClicked(MouseEvent e) {
    		int tabNumber = getUI().tabForCoordinate(this, e.getX(), e.getY());
    		if (tabNumber < 0)
    			return;
     
    		if (getIconAt(tabNumber) != null) {
    			Rectangle rect = ((CloseTabIcon) getIconAt(tabNumber)).getBounds();
    			if (rect.contains(e.getX(), e.getY())) {
    				// the tab is being closed
    				this.removeTabAt(tabNumber);
    			}
    		}
    	}
     
    	public void mouseEntered(MouseEvent e) {
    	}
     
    	public void mouseExited(MouseEvent e) {
    	}
     
    	public void mousePressed(MouseEvent e) {
    	}
     
    	public void mouseReleased(MouseEvent e) {
    	}
    }
     
     
     
     
    /**
     * The class which generates the 'X' icon for the tabs. The constructor accepts
     * an icon which is extra to the 'X' icon, so you can have tabs like in
     * JBuilder. This value is null if no extra icon is required.
     */
    class CloseTabIcon implements Icon {
    	private int x_pos;
    	private int y_pos;
    	private int width;
    	private int height;
    	private Icon fileIcon;
     
     
    	public CloseTabIcon(Icon fileIcon) {
    		this.fileIcon = fileIcon;
    		width = 16;
    		height = 16;
    	}
     
    	public void paintIcon(Component c, Graphics g, int x, int y) {
    		this.x_pos = x;
    		this.y_pos = y;
     
    		Color col = g.getColor();
     
    		g.setColor(Color.black);
    		int y_p = y + 2;
    		g.drawLine(x + 1, y_p, x + 12, y_p);
    		g.drawLine(x + 1, y_p + 13, x + 12, y_p + 13);
    		g.drawLine(x, y_p + 1, x, y_p + 12);
    		g.drawLine(x + 13, y_p + 1, x + 13, y_p + 12);
    		g.drawLine(x + 3, y_p + 3, x + 10, y_p + 10);
    		g.drawLine(x + 3, y_p + 4, x + 9, y_p + 10);
    		g.drawLine(x + 4, y_p + 3, x + 10, y_p + 9);
    		g.drawLine(x + 10, y_p + 3, x + 3, y_p + 10);
    		g.drawLine(x + 10, y_p + 4, x + 4, y_p + 10);
    		g.drawLine(x + 9, y_p + 3, x + 3, y_p + 9);
    		g.setColor(col);
    		if (fileIcon != null) {
    			fileIcon.paintIcon(c, g, x + width, y_p);
    		}
    	}
     
    	public int getIconWidth() {
    		return width + (fileIcon != null ? fileIcon.getIconWidth() : 0);
    	}
     
    	public int getIconHeight() {
    		return height;
    	}
     
    	public Rectangle getBounds() {
    		return new Rectangle(x_pos, y_pos, width, height);
    	}
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 209
    Par défaut
    voila un lien qui pourras t'aider:
    "http://www.java2s.com/Code/Java/Swing-Components/GroupableGroupHeaderExample.htm"

  4. #4
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    tu peut mettre un Component dans ton TableHeader

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TableColumn yourColumn = youTable.getColumnModel().getColumn(index);
    yourColumn.setHeaderRenderer(new MyHeaderRenderer());
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class MyHeaderRenderer extends JPanel implements TableCellRenderer {
        public MyHeaderRenderer() { 
              setLayout(...);
              add(...);
        }
     
        Component getTableCellRendererComponent(JTable table, ...) {
            return this;
        }
    }
    normalement ca ca doit marcher. mais comme tu voit, c'est un renderer. et un renderer c'est juste un affichage particulier d'un truc.
    ca supporte pas les action sur les composants...
    tu peux le gerer en mettant une action sur le header de la colonne mais si tu as plusieurs component dans le renderer qui ont des action differente => probleme.

    sinon tu peut le faire en voyant ou tu clique avec la souris et gérer les choses comme ca... pas tres joli.

    tu veut quoi exactement? quel genre d'action partilculiere ?

Discussions similaires

  1. JComboBox dans le header d'une Jtable
    Par Djobird dans le forum Composants
    Réponses: 2
    Dernier message: 06/08/2007, 10h44
  2. ContentType dans le header d'une jsp
    Par tizilfin dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 13/07/2007, 09h08
  3. [2.0] Mettre une Checkbox dans le header d'une colonne d'une DatagridView
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/01/2007, 10h27
  4. Réponses: 6
    Dernier message: 17/08/2006, 14h42
  5. [JTable] Saut de ligne dans la cellule d'une JTable
    Par enocet dans le forum Composants
    Réponses: 3
    Dernier message: 15/12/2005, 13h16

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