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 回答