在JTable中相交JLabel

时间:2010-07-17 15:50:38

标签: swing jtable jlabel

在下面的图片中,我试图实现以下目标。我有一个表格,并在表格单元格上压印了许多标签。标签的高度始终等于单元格高度。如果两个标签出现在同一个点上一个隐藏另一个,如长红色矩形在蓝色的长矩形所示。或者我想要的是将高度设为一半,然后显示两个矩形(显示矩形的起点和终点,因为高度是没用的我可以将矩形的一半高度容纳在同一个单元格中。)

我必须在JTable中执行此操作。要附加标签,我们可以通过设置矩形边界并使用table.add(label)创建JLabel对象;

image here

3 个答案:

答案 0 :(得分: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);
                }
            }
        });
    }
});

答案 1 :(得分:0)

查看以下演示文稿。我认为它谈到解决类似问题

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

答案 2 :(得分:0)

当您发现需要位于同一单元格中的两个标签时,请创建一个JPanel,其中红色和蓝色标签各占据面板高度的一半。然后只需将面板添加到表格中。