Jump to content
bmaster26

repaint()

Recommended Posts

bmaster26

mais uma vez estou ca eu pessoal, agora ia pedir-vos o maximo de informaçao sobre o metodo repaint.

o problema é,tenho varios rectangulos, ovais,linhas  desenhadas num painel. o que pretendo,é ao aumentar a minha frame,ou diminuir o que esta pintado nao seja apagado. obrigado pela vossa ajuda.

Share this post


Link to post
Share on other sites
brunoais

Incompleto e impercetível.

Com um pedido de ajuda desses não vais ter resposta


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
bmaster26

pronto para ajudarem tenho aqui o meu codigo necessario para entenderem algo mais.

public class JanelaPrincipal extends JFrame implements MouseListener, MouseMotionListener {

    int startMouseX;
    int startMouseY;
    int endMouseX;
    int endMouseY;
    public int figure;
    public int prevMouseX;
    public int prevMouseY;
    public int currentMouseX;
    public int currentMouseY;
    private final int PEN_OP = 0;
    private final int LINE_OP = 1;
    private final int RECT_OP = 2;
    private Panel painelBotoes;
    private Panel painelDesenho;
    private Panel painelEstado;
    //private boolean busyDrawing;
    private Button rectanguloButton;
    private Button penButton;
    private Button lineButton;
    private JLabel Cursor;
    private JLabel Area;
    private JLabel Largura;
    private JLabel Altura;
    private JLabel Scalex;
    private JLabel Scaley;
    private JTextField MouseStatus;
    private JTextField AreaStatus;
    private JTextField DimxStatus;
    private JTextField DimyStatus;
    private JTextField ScalexStatus;
    private JTextField ScaleyStatus;

    public JanelaPrincipal() {

        //super("projecto");
        createWidgets();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MouseStatus.addActionListener(new textListener());
        pack();
        this.addComponentListener(new componenteListener());
        painelDesenho.addMouseListener(this);
        painelDesenho.addMouseMotionListener(this);
        painelDesenho.setBackground(Color.WHITE);
        setVisible(true);
        setSize(300, 300);
        setLocationRelativeTo(null);   //permite à janela abrir no centro do ecra

    }

    @Override
    public void mouseClicked(MouseEvent e) {
        //mouselistener ,quando se pressiona qualquer botao do rato e liberta-se sem arrastar
        switch (figure) {
            case PEN_OP:
                painelDesenho.getGraphics().drawLine(e.getX(), e.getY(), 0, 0);
                break;
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
        //mouselistener ,quando se fica a pressionar algum botao do rato
        System.out.println("as");
        switch (figure) {
            case PEN_OP:

                painelDesenho.getGraphics().drawRect(e.getX(), e.getY(), 0, 0);//quando se pressiona o rato,no minimo desenha um pixel
                prevMouseX = e.getX();//saber o ponto inicial de X
                prevMouseY = e.getY();//saber o ponto inicial de y,quando se desloca o rato,unir os dois pontos(inicial e final)
                break;
            case LINE_OP:
//                painelDesenho.getGraphics().setXORMode(painelDesenho.getBackground());
//                painelDesenho.getGraphics().drawRect(e.getX(), e.getY(), 0, 0);
//                //painelDesenho.getGraphics().drawRect(e.getX(), e.getY(), 0, 0);
//                prevMouseX = e.getX();
//                prevMouseY = e.getY();
                startMouseX = e.getX();
                startMouseY = e.getY();
            case RECT_OP:
                startMouseX = e.getX();
                startMouseY = e.getY();
                break;
            /*
             * case RECT_OP: painelDesenho.getGraphics().drawRect(e.getX(),
             * e.getY(), 0, 0); prevMouseX = e.getX(); prevMouseY = e.getY();
             * break;
             */
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        //mouselistener,quando exite a libertação do rato apos ter havido o pressionamento deste
        updateMouseCoordinates(e);

        switch (figure) {

            case LINE_OP:
                endMouseX = e.getX();
                endMouseY = e.getY();
                
                painelDesenho.getGraphics().drawLine(startMouseX, startMouseY, endMouseX, endMouseY);
                //painelDesenho.getGraphics().setXORMode(painelDesenho.getBackground());
////                painelDesenho.getGraphics().drawLine(e.getX(), e.getY(), e.getX(), e.getY());//para saber as coordenadas onde o rato é libertado
                //painelDesenho.getGraphics().setXORMode(painelDesenho.getBackground());
                break;
            case RECT_OP:
                endMouseX = e.getX();
                endMouseY = e.getY();
                int sizex = endMouseX - startMouseX;
                int sizey = endMouseY - startMouseY;
                painelDesenho.getGraphics().drawRect(startMouseX, startMouseY, sizex, sizey);

                break;

        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        //mouselistener,  quando o mouse entra na area de um componente especifico
        updateMouseCoordinates(e);
    }

    @Override
    public void mouseExited(MouseEvent e) {
        //mouselistener,sai da area definida de um componente especifico
        updateMouseCoordinates(e);

    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //mousemotionlistener  ,quando é pressionado o botao do rato e seguidamento arrastado
        updateMouseCoordinates(e);

        switch (figure) //tem que ser com inteiros,nao pode ser strings
        {
            case PEN_OP:
                System.out.println("botao pen escolhido");
                //setGraphicalDefaults(e);
                painelDesenho.getGraphics().drawLine(prevMouseX, prevMouseY, e.getX(), e.getY());//desenha uma linha,ou une o ponto inicial e um ponto final
                painelDesenho.getGraphics().drawRect(e.getX(), e.getY(), 0, 0);//o ultimo ponto desenhado é como se fosse um pixel
                System.out.println("esta a fazer a pen");
                prevMouseX = e.getX();//obter as posiçoes finais desenhadas para serem as posiçoes inicias da uniao do proximo ponto
                prevMouseY = e.getY();
                break;

//            case LINE_OP:
//                System.out.println("botao linha escolhido");
//                painelDesenho.getGraphics().setXORMode(painelDesenho.getBackground());
//                painelDesenho.getGraphics().drawLine(prevMouseX, prevMouseY, e.getX(), e.getY());
//                System.out.println("eta a faxer a linha");
//                break;
        }
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        //mousemotionlistener,moveimento do mouse em um componente especifico
        updateMouseCoordinates(e);


    }

    /*
     * @Override public void actionPerformed(ActionEvent e) { String newx;
     * String newy; newx = DimxStatus.getText(); newy = DimyStatus.getText();
     * Dimension dim = new Dimension(Integer.parseInt(newx),
     * Integer.parseInt(newy)); setPreferredSize(dim); pack(); }
     */
    private class TrataBotoes implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if ("pen".equals(e.getActionCommand())) {
                System.out.println("botao pen pressionado");
                figure = PEN_OP;
            }


            if ("line".equals(e.getActionCommand())) {
                System.out.println("botao linha pressionado");
                figure = LINE_OP;
            }


            if ("rectangle".equals(e.getActionCommand())) {
                figure = RECT_OP;
            }


        }
    }

    private class textListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String newx = "";
            String newy = "";
            newx = DimxStatus.getText();
            newy = DimyStatus.getText();
            //setsize(newx,newy);
            Dimension dim = new Dimension(Integer.parseInt(newx), Integer.parseInt(newy));
            setPreferredSize(dim);
            repaint();
            pack();


            //setsize();
            //label.setText(j.getText());
            //MouseStatus.selectAll();


        }
    }

    private class componenteListener implements ComponentListener {

        @Override
        public void componentResized(ComponentEvent e) {

            System.out.println("resize");

            Component c = (Component) e.getSource();

            Dimension d = c.getSize();
            repaint();
            System.out.println("Size: " + d.width + "x" + d.height);

            DimxStatus.setText(String.valueOf(d.width));
            DimyStatus.setText(String.valueOf(d.height));


        }

        @Override
        public void componentMoved(ComponentEvent e) {
            System.out.println("moveu");
        }

        @Override
        public void componentShown(ComponentEvent e) {
            System.out.println("show");
        }

        @Override
        public void componentHidden(ComponentEvent e) {
            System.out.println("hidden");
        }
    }

    public void updateMouseCoordinates(MouseEvent e) {

        String xCoor = "";
        String yCoor = "";
        String selectedText = "";
        selectedText = MouseStatus.getText();
        if (e.getX() < 0) {         //se o rato estiver fora da frame          
            xCoor = "0";            //é para meter 0 no xcor
        } else {
            xCoor = String.valueOf(e.getX());//se nao estiver fora,significa que esta dentro,logo é preciso obter as coordenadas
        }
        if (e.getY() < 0) {
            xCoor = "0";
        } else {
            yCoor = String.valueOf(e.getY());
        }
        MouseStatus.setText("x:" + xCoor + " y:" + yCoor);
    }

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.