0

下の画像では、次のことを達成しようとしています。表と、表のセルにエンボス加工された多数のラベルがあります。ラベルの高さは常にセルの高さと同じです。したがって、2 つのラベルが同じポイントにある場合、1 つは非表示になります別の方法として、青の上に赤い四角形がある長い四角形に示されているように、私が望むのは、高さを半分にして、そこで両方の四角形を表示することです(高さは役に立たないので、四角形の開始点と終点を表示します同じセルにもう 1 つ収容するための四角形の高さ)。

これを 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

同じセルに配置する必要がある 2 つのラベルが見つかったらJPanel、赤と青のラベルがそれぞれパネルの高さの半分を占めている を作成します。次に、パネルをテーブルに追加します。

于 2010-07-21T14:44:24.880 に答える