Пересекающиеся JLabels внутри JTable - PullRequest
0 голосов
/ 17 июля 2010

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

Я должен сделать это внутри JTable. Чтобы прикрепить метку, мы можем создать объект JLabel, установив прямоугольные границы и используя table.add (label);

изображение здесь

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Откуда вы взяли, что можете сделать 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 голосов
/ 21 июля 2010

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

0 голосов
/ 17 июля 2010

Проверьте следующую презентацию.Я думаю, что это говорит о решении аналогичной проблемы

http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-4982.pdf?cid=925395

...