3

コード

import javax.swing.*;
import java.awt.*;

class tester {
   public static void main(String args[]) {
     JFrame fr = new JFrame();
     JPanel p = new JPanel();
     p.setBackground(Color.RED);
     p.paintImmediately(20,20,500,500);  
     fr.add(p);
     fr.setVisible(true);
     fr.setSize(2000,2000);
  }
}

パネルを完全に赤く塗装します。なぜ私はラインを得ないのですか?どうすれば入手できますか?

4

1 に答える 1

8

パネルを完全に赤色で塗装します。

背景を設定し、それ以上の描画を行わなかったからです...

なぜ私は行を取得しないのですか?どうすれば入手できますか?

これはそれを行う方法ではありません。なぜ電話するのpaintImmediatelyですか?ドキュメントの内容は次のとおりです。

このコンポーネントの指定された領域と、その領域に重なるすべての子孫を即座に描画します。

このメソッドを呼び出す必要はほとんどありません。ほとんどの場合、repaint を呼び出す方が効率的です。これにより、実際の描画が延期され、冗長な要求が単一の描画呼び出しに集約されます。このメソッドは、現在のイベントがディスパッチされている間に表示を更新する必要がある場合に役立ちます。

AWT/Swing での描画について読むことをお勧めします。


このようなものを得るには

ここに画像の説明を入力

次のようにコードを変更できます。

JFrame fr = new JFrame();
JPanel p = new JPanel() {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(20, 20, 500, 500);
    }
};
p.setBackground(Color.RED);
fr.add(p);
fr.setVisible(true);
fr.setSize(200, 200);
于 2011-10-21T07:51:31.733 に答える