在Jframe中调用paint()方法画图后,只要有个东西移动到图上,再移开图就没了,怎么能实现图自动重画呢?请帮忙解答,最好有代码片段和思路,谢谢。

解决方案 »

  1.   

    部分代码:public class MainFrame extends JFrame implements iOperator, ActionListener {
            public void paint(Graphics g) {
    // TODO Auto-generated method stub
    super.paint(g);
    g.drawLine(50, 50, 100, 100);
    }
    }
      

  2.   

    程序应该是自动调用paint方法吧,但是貌似只画了一次,然后一有东西覆盖上去就被覆盖的部分就没了。
      

  3.   

    super.paint(g);去掉就行了
    你是用的JFrame的paint,所以不用super.paint(g);
      

  4.   

    请问 this.setVisible(true); 是在paint之前还是之后,把super.paint(g);去掉后,就只看到一条线,背景竟然是Frame后面的背景,就好像Frame是透明的一样,只有一条线,然后我在Frame设计的Menu菜单位置点击一下,之前设计好的页面就出来了,但是画的线就没了,还是没有被重画。
      

  5.   

    你的frame上面的控件,要设置setOpaque(false)才能把背面的背景画出来。
    而且建议你做个panel,把背景之类的画在panel上,然后把panel加到jframe中去,这样的话,比较好控制
      

  6.   

    我是把组件直接加在JFrame上,运行时就是一个Freme空框,只有一条线,里面就只有框后面的东西,例如windows桌面
      

  7.   

    那你试试看public void paint(Graphics g) {
    super.paint(g);
    Graphics g2 = getContentPane().getGraphics();
    g2.drawLine(50, 50, 100, 100);
        }
    PS:5楼的 板砖  属于误操作
      

  8.   

    图是画出来了,但是很奇怪,我画的线在menu附近,我打开menu,只要中间的menuItem有一点点触到画的线,那条线就有一部分没了。消失的部分,坐标x,y小于触点的坐标,还是没能实现自动重画。
      

  9.   

    难道你想menu弹下来以后,线画在menu上?
      

  10.   

    呵呵,我已经完全不知道你想做啥了
    看看下面这个是不是你想要的效果public class Test4DrawLine extends JFrame { /**
     * @param args
     */
    public static void main(String[] args) {
    new Test4DrawLine();
    }

    public Test4DrawLine() {
    setSize(500, 500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    MyPanel myPanel = new MyPanel();
    setContentPane(myPanel);

    JMenuBar jmb = new JMenuBar();

    JMenu jm = new JMenu("Menu1");
    JMenuItem jmi = new JMenuItem("MenuItem A");
    jm.add(jmi);
    jmi = new JMenuItem("MenuItem B");
    jm.add(jmi);
    jmi = new JMenuItem("MenuItem C");
    jmi.setOpaque(false);
    jm.add(jmi); jm.setOpaque(false);
    jmb.add(jm);
    setJMenuBar(jmb); JButton btn = new JButton();
    btn.setBounds(200, 200, 80, 30);
    btn.setText("Test");
    myPanel.add(btn); setLayout(null);
    setVisible(true);
    }


    class MyPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
    g.drawLine(10, 20, 100, 100);
    //super.paint(g);
        }
    }}
      

  11.   

    我想了想,应该是因为我没把线画在panel上的缘故,我是直接调用Frame的继承方法paint(),在paint里划线,所以一被覆盖就没了。