2010-07-17 18 views
0

在下面的圖片中,我試圖實現以下內容。我有一個表格和大量標籤壓印在表格單元格上。標籤的高度始終等於單元格高度。因此,如果兩個標籤在同一個點中,一個隱藏另一個,如長矩形中紅色矩形顯示的藍色所示。或者,我想要的是將高度設置爲一半,然後顯示兩個矩形(顯示矩形的起點和終點,因爲高度是沒有用的,我可以在一個矩形的高度的一半,以容納一個在同一個單元格中。)JTable中相交的JLabels

我必須在JTable中執行此操作。要附加標籤,我們可以通過設置矩形邊界來創建JLabel對象並使用table.add(label);

image here

回答

1

你從哪裏得到這樣的想法,你可以做table.add(label),並希望標籤可以神奇地畫在桌子上?

(同一個用於@ dpatch的答案。)

你必須使用單元格渲染器/編輯器內表的任何風俗畫。 (或者分層窗格/玻璃窗格,如果它漂浮在表格上方,但看起來像是希望單元格中的標籤。)

粗糙的渲染器,將單元格(0,0)繪製爲半高藍色全高紅色:

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

它的工作原理。你可以通過設置label.setOpaque(true)和label.setVisible(true)來嘗試; – Harish 2010-09-07 05:58:32

+0

如果有效,如果您能接受答案,我將不勝感激。謝謝! – 2010-09-07 14:26:01

0

當你發現兩個標籤需要在同一個小區,創建一個具有紅色和藍色標籤,一個JPanel面板的各佔據一半的高度。然後,將面板添加到表格中。