0

長方形を作成しました。これに1つのJLabelを配置する必要があります。では、どうすればJLabelを長方形の中に入れることができますか。

ここにコード:-

public class ColoredRect extends JPanel
{

    private double x, y, width, height;  

    public ColoredRect(double x,double y)
    {
          this.x = x;
          this.y = y;
          width = 100;
          height =40;
          rect = new Rectangle2D.Double(this.x , this.y,width,height);
    }
    public void paintComponent(Graphics g) 
    {
        super.paintComponent(g);  
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.cyan);
        g2.fill(rect);
    }
}

これを実装するためのアイデアを教えてください。

前もって感謝します。

4

3 に答える 3

5

同様の結果を達成する方法はたくさんあります。ただし、実際にアプローチを使用するべきではありません。paintComponentを使用して、実際にペイントし、スイングコンポーネントを配置しないようにします。これは、より明確なアプローチだと思います。

JLayeredPaneを使用して、ラベルを1つのレイヤーに配置し、図面を別のレイヤーに配置できます。

ラベルに境界線を使用することも検討します。この場合、長方形はまったく必要ないかもしれません。こちらの例をご覧ください:境界線のあるラベル

お役に立てれば

于 2012-06-28T06:39:59.513 に答える
1

ラベルをBufferedImageにペイントし、長方形をペイントしてから、画像をペイントします。

于 2012-06-29T06:26:34.983 に答える
0

Mark Bramnikが言ったように、これを行うにはさまざまな方法がありますが、paintComponentそれは1つですが、最善ではありません。あまり多くのコンポーネントを入れていない場合は、次のようにカラーリングJPanelをオーバーライドするときにnullレイアウトを使用できます。paintComponent

this.setLayout(null);
//...when you get to adding your JLabel...
this.add(theJLabel);
theJLabel.setBounds(x, y, width, height);

JPanelに配置するすべてのコンポーネントの座標を設定する必要があることに注意してください。ヌルレイアウトについては、ここで詳しく説明します。

メソッドをオーバーライドする必要がある場合は、次のpaintComponentようにすることができます。

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics g2 = g.create();
    theJLabel.setPreferredSize(new Dimension(width, height));
    g2.translate(x, y);
    theJLabel.paint(g2);
    g2.dispose();
}

醜いかもしれませんが、実行可能です(また、コードはテストされていませんが、機能するはずです)。

よりクリーンな方法は、JLayeredPane、またはJDK1.7.0を使用している場合はJLayerです。

幸運を!

于 2012-06-28T08:36:05.527 に答える