面板为什么不画?

时间:2011-10-21 07:49:44

标签: java swing colors java-2d paintcomponent

CODE

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);
  }
}

我将面板涂成红色。我为什么不上线?我怎么能得到它?

1 个答案:

答案 0 :(得分:8)

  

我得到一个完全涂成红色的面板。

那是因为你设置背景而没有做任何进一步的绘画......

  

为什么我不接受这条线路?我怎么能得到它?

这不是这样做的方法。你为什么打电话给paintImmediately?以下是文档说的内容:

  

绘制此组件及其所有组件中的指定区域   立即与该地区重叠的后代。

     

很少需要调用此方法。在大多数情况下,它更多   高效地调用重绘,这推迟了实际绘画和可以   将冗余请求折叠为单个绘制调用。这个方法是   如果在当前事件发生时需要更新显示,则非常有用   被派遣。

我建议你阅读AWT / Swing中的绘画。


得到这样的东西

enter image description here

您可以像这样更改代码:

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);