2010-07-17 3 views
0

Dans l'image ci-dessous, j'essaie d'obtenir ce qui suit.J'ai une table et beaucoup d'étiquettes en relief sur les cellules de table.La hauteur des étiquettes est toujours égale à la hauteur de la cellule.Si deux étiquettes venir dans le même point on cache l'autre comme indiqué dans les rectangles plus longs avec rect rouge sur bleu.Autre ce que je veux est de faire la moitié de la hauteur et là en montrant les deux rectangles (montrant les points de départ et de fin du rectangle depuis la hauteur Je ne peux pas utiliser la moitié de la hauteur du rectangle pour en loger un de plus dans la même cellule.)Intersection JLabels à l'intérieur d'un JTable

Je dois le faire dans un JTable. Pour attacher une étiquette, nous pouvons créer un objet JLabel en définissant les limites rectangulaires et en utilisant table.add (label);

image here

Répondre

1

Où avez-vous eu l'idée que vous pouvez faire table.add(label) et espérer que l'étiquette soit magiquement peinte sur la table?

(même ??? la réponse de @ dpatch.)

Vous devez utiliser renderer/éditeur cellule pour une peinture personnalisée à l'intérieur de la table. (Ou volet en verre/volet en couches si quelque chose flotte au-dessus de la table, mais il semble que vous voulez les étiquettes dans les cellules.)

Un moteur de rendu brut qui peint la cellule (0, 0) en bleu à mi-hauteur rouge pleine hauteur:

table.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() 
{ 
    private int row_ = 0; 

    public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     row_ = row; 
     return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
    } 

    public void setUI(LabelUI ui) 
    { 
     super.setUI(new BasicLabelUI() 
     { 
      public void paint(Graphics g, JComponent c) 
      { 
       super.paint(g, c); 
       if(row_ == 0) 
       { 
        Rectangle r = g.getClipBounds(); 
        g.setColor(Color.RED); 
        g.fillRect(r.x, r.y, r.width, r.height); 
        g.setColor(Color.BLUE); 
        g.fillRect(r.x, r.y + 1, r.width, r.height/2 - 1); 
       } 
      } 
     }); 
    } 
}); 
+0

Cela fonctionne. Vous pouvez essayer en définissant les labels label.setOpaque (true) et label.setVisible (true); – Harish

+0

Si cela fonctionne, j'apprécierais si vous pouvez accepter la réponse. Merci! –

0

Lorsque vous trouvez deux étiquettes qui doivent être dans la même cellule, créez un JPanel avec les étiquettes rouges et bleues chacune jusqu'à la moitié de la hauteur du panneau . Ensuite, ajoutez simplement le panneau à la table.