java 不用paint方法能不能绘图?

大蛮妖 2015-12-17 08:47:10


import java.awt.Color;
import java.awt.Graphics2D;
import javax.swing.JFrame;

public class cesh extends JFrame {

Graphics2D g2d;
public cesh(){

this.setSize(600, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);

this.setVisible(true);
huatu();
}

public void huatu(){
this.g2d = (Graphics2D) this.getGraphics();
g2d.setColor(Color.GREEN);
g2d.drawLine(0,0,200,200);
g2d.fillOval(110, 340, 100, 100);
}

public static void main(String[] args){
new cesh();
}
}



比如上面这个测试程序,如果完全脱离paint方法,能不能画图?

求教。
...全文
232 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大蛮妖 2015-12-18
  • 打赏
  • 举报
回复
引用 6 楼 alan19931103 的回复:
[quote=引用 5 楼 phoeph 的回复:]
可以[/quote] 能不能帮忙写个小例子。。谢谢!
大蛮妖 2015-12-18
  • 打赏
  • 举报
回复
引用 6 楼 alan19931103 的回复:
[quote=引用 5 楼 phoeph 的回复:]
可以[/quote] 能不能帮忙写个小例子。。谢谢!
大蛮妖 2015-12-18
  • 打赏
  • 举报
回复
引用 9 楼 jia20003 的回复:
看了以后,我才知道你真的不会Swing,开玩笑的! 你的好好学习一把。
突击学习了一个月。。以前没搞过swing。。所以才求教的
gloomyfish 2015-12-18
  • 打赏
  • 举报
回复
看了以后,我才知道你真的不会Swing,开玩笑的! 你的好好学习一把。
大蛮妖 2015-12-17
  • 打赏
  • 举报
回复
public void paint(Graphics g){} 刚测试发现,加上paint空方法就能画出图。
大蛮妖 2015-12-17
  • 打赏
  • 举报
回复
如果可以的话,有没有大神给个简短的例子看看?
大蛮妖 2015-12-17
  • 打赏
  • 举报
回复
public void paint(Graphics g){} 刚有测试发现,如果加上上面这个空方法,就能画出图
alan19931103 2015-12-17
  • 打赏
  • 举报
回复
引用 5 楼 phoeph 的回复:
可以
大蛮妖 2015-12-17
  • 打赏
  • 举报
回复
引用 4 楼 alan19931103 的回复:
不可以,无论是awt还是swing,都必须使用paint方法。这个是系统级别的方法,只有使用这个方法才能画出东西来,即便你不自己调用,你的所有绘制都控制在paint方法内部。 至于你说加上那句,你不过是覆盖了paint方法而已,还把它空了!这个绝对不允许的,尤其是在swing当中。为什么加上以后反而画出来了,因为你的覆盖干扰了重绘管理器的工作,重新绘制了一次所有组件。如果运气好,你多试几次可以发现有时候图像还是没有画出来。 在我的电脑上你的图片大概有一半的几率能画出来,这完全取决于重绘管理器的安排罢了
额,我试了好多次没发现不会画出来图的情况。。这个不重要,不管了,我之前看到了一个没有用paint画图的程序,他是在事件里面的,直接贴程序吧(我意思是想,如果可以的话,我随便在一个类里面,获取画笔,然后画画就好了,不知道可行不):
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
 
class DrawlinePanelClass  extends JPanel {
    int x1, x2, y1, y2;
    Color color = Color.BLACK;
    public DrawlinePanelClass () {
        this.setBackground(Color.WHITE);
        addMouseMotionListener(new MouseMotionListener() {
            @Override
            public void mouseMoved(MouseEvent event) {
            };
            @Override
            public void mouseDragged(MouseEvent event) {
 
                Graphics2D g = (Graphics2D) getGraphics();
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g.setColor(color);
                x2 = event.getX();
                y2 = event.getY();
                g.drawLine(x1, y1, x2, y2);
                x1 = x2;
                y1 = y2;
                g.dispose();
            }
        });
        addMouseListener(new MouseAdapter() {
            Random r = new Random();
            @Override
            public void mousePressed(MouseEvent event) {
                x1 = event.getX();
                y1 = event.getY();
                color = new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256));
            }
        });
    }
}

public class DrawlineFrameClass extends JFrame {
    JPanel panel1;
    JButton cButton;
 
    public DrawlineFrameClass() {
        super("Drawline绘制工具");
        final DrawlinePanelClass panel = new DrawlinePanelClass();
        panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        panel1 = new JPanel();
        cButton = new JButton("清除");
        panel1.add(cButton);
        cButton.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                panel.repaint();
            }
        });
        getContentPane().add(panel);
        getContentPane().add(panel1, "South");
        setSize(600, 600);
        setVisible(true);
        setResizable(false);
        this.setDefaultCloseOperation(3);
    }
    public static void main(String[] args) {
        new DrawlineFrameClass();
    }
}
alan19931103 2015-12-17
  • 打赏
  • 举报
回复
不可以,无论是awt还是swing,都必须使用paint方法。这个是系统级别的方法,只有使用这个方法才能画出东西来,即便你不自己调用,你的所有绘制都控制在paint方法内部。 至于你说加上那句,你不过是覆盖了paint方法而已,还把它空了!这个绝对不允许的,尤其是在swing当中。为什么加上以后反而画出来了,因为你的覆盖干扰了重绘管理器的工作,重新绘制了一次所有组件。如果运气好,你多试几次可以发现有时候图像还是没有画出来。 在我的电脑上你的图片大概有一半的几率能画出来,这完全取决于重绘管理器的安排罢了

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧