Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema en Java y Graphics

Iniciado por theroger, 28 de Abril de 2014, 11:03:32 AM

« anterior - próximo »

theroger

Hola, estoy con un programa para la universidad y no consigo que al darle a al botón calcular me dibuje en la zona blanca.
De echo no me ejecuta el método paintComponent y no se porque. Son tres Panel metidos dentro de un Frame, dos Panels se ejecutan al iniciar la aplicación, pero el Panel de dibujar se tiene que ejecutar al darle al botón de calcular. Me interesa que la ZonaGraficaArc() sea una clase porque después le implementare métodos para mover el gráfico con el ratón.

Os pongo el código por si alguien ve el problema.
Gracias.

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

import javax.swing.*;

public class FinestraAppDib extends JFrame implements ActionListener{
private JTextField textField;

JPanel Menu, Dades, DibuixArc;
JButton btnCalcular;

public static void main(String[] args) {
FinestraAppDib frame = new FinestraAppDib();
        frame.setVisible(true);
}

public FinestraAppDib() {

       
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800,600);

Menu = new JPanel();
getContentPane().add(Menu, BorderLayout.NORTH);

Dades = new JPanel();
getContentPane().add(Dades, BorderLayout.WEST);

DibuixArc = new JPanel();
getContentPane().add(DibuixArc, BorderLayout.CENTER);

Menu();
Dades();

}

public void Menu(){
btnCalcular = new JButton("Calcular");
Menu.add(btnCalcular);
btnCalcular.addActionListener(this);

}

public void Dades(){

textField = new JTextField();
Dades.add(textField);
textField.setColumns(10);

}

public void DibuixArc(){

DibuixArc=new ZonaGraficaArc();
DibuixArc.setVisible(true);
repaint();

}


class ZonaGraficaArc extends JPanel{

int offsetX, offsetY;
    boolean dragging;
 
   
    @Override
public void paintComponents(Graphics g) {
   
super.paintComponents(g);
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.blue);
g2.draw(new Line2D.Double(0, 0, 900, 600));
g.drawLine(900, 600, 0, 0);
System.out.println("Hola paintComponent(Graphics g)");

    }//END paintComponent
   
    ZonaGraficaArc(){
       DibuixArc.setBackground(Color.white);               
       System.out.println("Hola ZonaGraficaArc()");
       DibuixArc.validate();
       repaint();

    }
   
     
}//END ZonaGraficaArc


@Override
public void actionPerformed(ActionEvent e) {
DibuixArc();

}
}

notoi

paintComponent no deberia ser sin 's'???

notoi

Se me olvidaba tb creo que el método es protected y no public:

protected void paintComponent(Graphics g)

theroger

Hola, gracias por contestar, no el proyecto lo tenia sin s, pero para ponerlo aquí me equivoque.
Mira al final lo he conseguido, estuve leyendo cursos por internet y vi que al ser un JFrame lo tenia que hacer con Canvas y no con JPanel, y con el metodo paint en vez del paintComponent. Así me funciono sin ningún problema. Me funciona bien con public, al igual que con protected.

He estado haciendo cambios en el código y por probar cambie el Canvas por JPanel y el paint por paintComponent y ahora me funciona todo perfecto, ya que los gráficos al mover se ven mejor en el paintComponent que en paint.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.