Swing JTable中相交的jlabel

Swing JTable中相交的jlabel,swing,jtable,jlabel,Swing,Jtable,Jlabel,在下图中,我试图实现以下目标。我有一个表格和许多标签压印在表格单元格上。标签的高度始终等于单元格高度。因此,如果两个标签位于同一点,一个会隐藏另一个,如红色矩形在蓝色矩形上的较长矩形所示。或者,我希望将高度设置为一半,然后显示两个矩形(显示矩形的起点和终点,因为高度没有用处,我可以将矩形的高度减半,以便在同一单元格中容纳多个矩形。) 我必须在JTable内完成这项工作。要附加标签,我们可以通过设置矩形边界并使用table.add(标签)创建一个JLabel对象 查看以下演示文稿。我认为它讨论了解

在下图中,我试图实现以下目标。我有一个表格和许多标签压印在表格单元格上。标签的高度始终等于单元格高度。因此,如果两个标签位于同一点,一个会隐藏另一个,如红色矩形在蓝色矩形上的较长矩形所示。或者,我希望将高度设置为一半,然后显示两个矩形(显示矩形的起点和终点,因为高度没有用处,我可以将矩形的高度减半,以便在同一单元格中容纳多个矩形。)

我必须在JTable内完成这项工作。要附加标签,我们可以通过设置矩形边界并使用table.add(标签)创建一个JLabel对象


查看以下演示文稿。我认为它讨论了解决类似问题的方法


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

您是从哪里想到可以使用
表的。添加(标签)
并希望将标签神奇地涂在表上

(与@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);
                }
            }
        });
    }
});

我不确定是否有其他方法可以做到。它是有效的。您可以通过设置label.setOpaque(true)和label.setVisible(true)来尝试;如果行得通,如果你能接受这个答案,我将不胜感激。谢谢