【问题标题】:How to call java paintComponent using repaint如何使用重绘调用java paintComponent
【发布时间】:2014-11-22 13:36:18
【问题描述】:

this 视频中,drawing() 方法在主类中被调用。当我们在 main 方法中删除 drawing() 时,它仍然绘制形状。我们怎样才能避免这种情况?

形状类:

import java.awt.*;
import javax.swing.*;
public class shapes{
public static void main(String[] args){
    JFrame frame = new JFrame("Test");
    frame.setVisible(true);
    frame.setSize(400,200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    draw object = new draw();
    frame.add(object);

    object.drawing();
    }

}

绘制类:

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

public class draw extends JPanel{
public void drawing(){
    repaint();
}
public void paintComponent(){
  super.paintComponent(g);
  g.setColor(Color.BLUE);
  g.fillRect(10,15,100,100);
  }
}

【问题讨论】:

    标签: java swing paint paintcomponent repaint


    【解决方案1】:

    代码有一些小问题,但我认为它只是一个用于演示目的的小 sn-p。详情请看Performing Custom Painting

    其实本教程也能回答你的问题,但总结一下:

    每当必须重新绘制组件时,都会“由操作系统”自动调用paintComponent 方法。对repaint() 的调用只是告诉操作系统尽快再次调用paintComponent。所以你可以打电话给repaint(),确保你卡住的东西尽快出现在屏幕上。

    如果您明确想要启用/禁用某些绘画操作,您不能通过阻止paintComponent 被调用来影响这一点。无论如何都会被调用。相反,您将引入一些标志或状态来指示是否应该绘制某些东西。

    在您的示例中,大致可以这样完成:

    import java.awt.*;
    import javax.swing.*;
    
    public class Draw extends JPanel{
        private boolean paintRectangle = false;
    
        void setPaintRectangle(boolean p) {
            paintRectangle = p;
            repaint();
        }
    
        @Override
        public void paintComponent(){
            super.paintComponent(g);
    
            if (paintRectangle) {
                g.setColor(Color.BLUE);
                g.fillRect(10,15,100,100);
            }
        }
    }
    

    然后您可以调用setPaintRectangle 方法来指示是否应该绘制矩形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多