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);
}
}
我将面板涂成红色。我为什么不上线?我怎么能得到它?
答案 0 :(得分:8)
我得到一个完全涂成红色的面板。
那是因为你设置背景而没有做任何进一步的绘画......
为什么我不接受这条线路?我怎么能得到它?
这不是这样做的方法。你为什么打电话给paintImmediately
?以下是文档说的内容:
绘制此组件及其所有组件中的指定区域 立即与该地区重叠的后代。
很少需要调用此方法。在大多数情况下,它更多 高效地调用重绘,这推迟了实际绘画和可以 将冗余请求折叠为单个绘制调用。这个方法是 如果在当前事件发生时需要更新显示,则非常有用 被派遣。
我建议你阅读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);