用NETBEAN向导新建了一个桌面应用程序,但是不知道怎么调用paint()函数。repaint()函数是用this.getFrame().repaint()方式调用的,但貌似没调用我自己写的paint(),应该是没有重写成功,因为不是很了解FrameView,所以还望论坛里的前辈们帮我解答一下,谢谢!

解决方案 »

  1.   

    不知道netbean创建的程序是怎么样的,但是你创建的是
    桌面应用程序的话,应该有JFrame或者JPanel类的子类吧,
    你在这个类里重写就是,去查一查文档注意不要写错了
      

  2.   

    代码如下:
    public class PaintPadView extends FrameView {//继承FrameView
        ....
        public PaintPadView(SingleFrameApplication app) {//构造
            ....
        }
        public void paint(Graphics g) {//重写paint()
            ....
        }
        public void update(Graphics g) {
            paint(g);
        }
        private void jPanel3MouseDragged(java.awt.event.MouseEvent evt) {
            ....
            this.getFrame().repaint();//调用repaint()
        }
    }
    paint()无法调用
      

  3.   

    public class PaintPadView extends FrameView {
        //0-画笔 1-橡皮 2-多边形 3-直线 4-圆 5-矩形
        protected int toolFlag = 0;
        protected int x = -1;
        protected int y = -1;
        protected Vector paintInfo = new Vector();
        protected Color c = new Color(0, 0, 0);
        protected BasicStroke size = new BasicStroke(con, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);
        public PaintPadView(SingleFrameApplication app) {
            super(app);
            initComponents();
            ResourceMap resourceMap = getResourceMap();
            int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
            messageTimer = new Timer(messageTimeout, new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    statusMessageLabel.setText("");
                }
            });
            messageTimer.setRepeats(false);
            int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
            for (int i = 0; i < busyIcons.length; i++) {
                busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
            }
            busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
                    statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
                }
            });
            idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
            statusAnimationLabel.setIcon(idleIcon);
            progressBar.setVisible(false);        // connecting action tasks to status bar via TaskMonitor
            TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
            taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    String propertyName = evt.getPropertyName();
                    if ("started".equals(propertyName)) {
                        if (!busyIconTimer.isRunning()) {
                            statusAnimationLabel.setIcon(busyIcons[0]);
                            busyIconIndex = 0;
                            busyIconTimer.start();
                        }
                        progressBar.setVisible(true);
                        progressBar.setIndeterminate(true);
                    } else if ("done".equals(propertyName)) {
                        busyIconTimer.stop();
                        statusAnimationLabel.setIcon(idleIcon);
                        progressBar.setVisible(false);
                        progressBar.setValue(0);
                    } else if ("message".equals(propertyName)) {
                        String text = (String) (evt.getNewValue());
                        statusMessageLabel.setText((text == null) ? "" : text);
                        messageTimer.restart();
                    } else if ("progress".equals(propertyName)) {
                        int value = (Integer) (evt.getNewValue());
                        progressBar.setVisible(true);
                        progressBar.setIndeterminate(false);
                        progressBar.setValue(value);
                    }
                }
            });
        }    public void update(Graphics g) {
            System.out.println("In update");
            paint(g);
        }    public void paint(Graphics g) {//待完善
            Graphics2D g2d = (Graphics2D) g;
            Point p1, p2;
            int n = paintInfo.size();        System.out.println("In paint");
            for (int i = 0; i < n - 1; i++) {
                p1 = (Point) paintInfo.elementAt(i);
                p2 = (Point) paintInfo.elementAt(i + 1);
                size = new BasicStroke(p1.boarder, BasicStroke.CAP_BUTT,
                        BasicStroke.JOIN_BEVEL);            g2d.setColor(p1.col);
                g2d.setStroke(size);
                if (p1.tool == p2.tool) {
                    switch (p1.tool) {
                        case 0:// 画笔
                            Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
                            g2d.draw(line1);
                            break;
                        case 1:// 橡皮
                            g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);
                            break;
                        case 2://多边形
                            break;
                        case 3:// 画直线
                            Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
                            g2d.draw(line2);
                            break;
                        case 4:// 画圆
                            Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x - p1.x), Math.abs(p2.y - p1.y));
                            g2d.draw(ellipse);
                            break;
                        case 5:// 画矩形
                            Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x - p1.x), Math.abs(p2.y - p1.y));
                            g2d.draw(rect);
                            break;
                        default:
                    }// end switch
                }// end if
            }// end for
        }
    private void jPanel3MousePressed(java.awt.event.MouseEvent evt) {
            Point p2;
            System.out.println("press" + toolFlag);
            switch (toolFlag) {
                case 3:// 直线
                    x = (int) evt.getX();
                    y = (int) evt.getY();
                    p2 = new Point(x, y, c, toolFlag, con);
                    paintInfo.addElement(p2);
                    break;
                case 4: // 圆
                    x = (int) evt.getX();
                    y = (int) evt.getY();
                    p2 = new Point(x, y, c, toolFlag, con);
                    paintInfo.addElement(p2);
                    break;
                case 5: // 矩形
                    x = (int) evt.getX();
                    y = (int) evt.getY();
                    p2 = new Point(x, y, c, toolFlag, con);
                    paintInfo.addElement(p2);
                    break;
                default:
            }
        }    private void jPanel3MouseDragged(java.awt.event.MouseEvent evt) {
            Point p1;
            switch (toolFlag) {
                case 0:// 画笔 
                case 1:// 橡皮
                    System.out.println("drag" + toolFlag);
                    x = (int) evt.getX();
                    y = (int) evt.getY();
                    p1 = new Point(x, y, c, toolFlag, con);
                    paintInfo.addElement(p1);
                    this.getFrame().repaint();
                    break;
                default:
            }
        }
    代码没贴完,太长了,选了主要的
      

  4.   

    import org.jdesktop.application.FrameView;
    FrameView 来自上面的包
      

  5.   

    怎么用frameview啊,貌似不是标准JDK里的东西,怎么repaint()