2010-07-17 4 views
0

В приведенном ниже изображении я пытаюсь добиться следующего. У меня есть таблица и множество ярлыков, выбитых над ячейками таблицы. Высота меток всегда равна высоте ячейки. Так что, если две метки приходите в одну и ту же точку, один скрывает другую, как показано в более длинных прямоугольниках с красным прямоугольником над синим. В остальном, я хочу, чтобы высота была наполовину и там, показывая оба прямоугольника (показывающие начальную и конечную точки прямоугольника с высоты я не могу использовать половину высоты прямоугольника для размещения еще одного в той же ячейке.)Пересечение JLabels внутри JTable

Я должен сделать это внутри 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

+0

Если это сработает, я буду признателен, если вы сможете принять ответ. Благодаря! –

0

Когда вы найдете две метки, которые должны находиться в одной и той же клетке, создать JPanel с красными и синими этикетками каждый принимая половину высоты панели , Затем просто добавьте панель в таблицу.

Смежные вопросы