Java 为什么不是';面板没有漆吗?
代码Java 为什么不是';面板没有漆吗?,java,swing,colors,java-2d,paintcomponent,Java,Swing,Colors,Java 2d,Paintcomponent,代码 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.ad
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);
}
}
我把面板漆成了红色。为什么我不接电话?我怎样才能得到它
我得到一块完全涂成红色的面板。
那是因为你设置了背景,没有做进一步的绘画
我为什么不接电话?我怎样才能得到它?
这不是做这件事的方法。为什么要立即调用油漆?以下是文档中的内容:
绘制此组件中的指定区域及其所有
与区域重叠的子体,立即
很少需要调用此方法。在大多数情况下,这更重要
调用重新绘制非常有效,这会延迟实际绘制,并且可以
将冗余请求折叠为单个绘制调用。这种方法是可行的
如果需要在当前事件发生时更新显示,则此选项非常有用
被派遣
我建议你读一下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);
@好的,谢谢你。实际上,我想保持一切不变,只添加一条线。这就是我不想再次调用repaint/paint的原因。有没有一种方法可以通过不再次调用paint方法而只在paint方法所绘制的内容上添加一条线来绘制线,您不能调用g.drawLine
并期望它永远留在面板上。这不是它的工作原理。(然后您必须在缓冲图像上绘制线条,并将图像绘制到面板上。)您不能保持代码不变,只需添加“绘制线条”。我提供的代码是最接近您的代码的解决方案。@aioobe@grassPro可以通过在paint method中设置一个条件来完成。paint method在OP需要时适用于if
,在OP需要时适用于else
<代码>绘制(Gra g){if(firstTime){//…}else{//…}}
这是个坏主意,因为第一次绘制组件时,它可能比实际设置大小、打包、最大化窗口时小得多,你可以命名它。。。然后提供的图形
对象将有一个讨厌的剪辑集…@aioobe是的,这可能是一个坏主意,但是“讨厌的剪辑集”是什么意思?哪一行?最终从@aioobe的答案中得到了您的意图:-)顺便说一句,在按照建议阅读教程时,请不要跳过关于java命名约定的章节,学习它们并坚持它们