JAVA新定义的绘图方法(不是paint()),图画无法留存。

JAVA绘图可否不用paint()?定义了绘图方法display(),绘制一个红色矩形:importjavax.swing.*;importjava.applet.*;i... JAVA绘图可否不用paint() ?

定义了绘图方法display(),绘制一个红色矩形:

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

public class Test extends JFrame {
public java.awt.Graphics g1;

public Test() {
super();
setSize(800, 800);
Container container = getContentPane();
container.setBackground(Color.black);
setLocationRelativeTo(null);
setVisible(true);
g1 = getGraphics();
display(g1);
}

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

public void display(Graphics gra) {
gra.setColor(Color.red);
gra.fillRect(200, 200, 300, 61);
}

}

为什么屏幕上没有显示“红色矩形” ? display()没有起作用?

不用paint(),如何调整程序?使display()的图画可以留存。
展开
 我来答
百度网友feb84c5
2014-02-08 · TA获得超过170个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:149万
展开全部
你那种办法压根行不通,每隔一段时间或者触发什么事件都会导致Frame 重新绘制,它会自动调用paint方法和repaint。你的代码只会执行一次,被更新时会被擦除。只能使用paint 或者repaint 来实现
追问
哦。

如果需要在屏幕四边,显示不同的内容(功能差别很大)。
这种思路:定义四个方法disp1()、disp2()、disp3()、disp4(),按需分别调用。 这种思路是错误的?

只能定义一个方法paint(),然后在paint()中switch……case四路分支实现?
追答
是的,在调用paint()方法之前frame上绘制的所有东西会被擦除。这是没办法的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狼破浪
2014-02-08 · TA获得超过470个赞
知道小有建树答主
回答量:324
采纳率:100%
帮助的人:168万
展开全部

改成这样就可以

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

public class Test extends JFrame {

    public java.awt.Graphics g1;
    private Color color;

    public Test() {
        super();
        setSize(800, 800);
        Container container = getContentPane();
        container.setBackground(Color.black);
        setLocationRelativeTo(null);
        setVisible(true);
        g1 = getGraphics();

        setColor(Color.red);
    }

    @Override
    public void repaint() {
        super.repaint();
        getContentPane().setBackground(color);
    }

    public void setColor(final Color color){
        this.color = color;
        repaint();
    }


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

}
追问
你好。
没有display()方法
没画fillRect(200, 200, 300, 61);

可否不用paint()、repaint() ?
追答
我看你的代码只是设置背景颜色而已。所以就这样写了。实际上setBackGround和fillRect只是API调用不太一样。其他都差不多

二,不能没有repaint()方法,因为你需要动态的改变SWING界面,没有repaint就不能刷新。显示的效果会很奇怪
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式