0

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

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

图片在这里

4

3 回答 3

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);
                }
            }
        });
    }
});
于 2010-09-03T19:47:58.593 回答
0

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

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

于 2010-07-17T18:23:27.690 回答
0

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

于 2010-07-21T14:44:24.880 回答