Jump to content

Classe Canvas


alphasil
 Share

Recommended Posts

Olá ppl;

Tenho aqui um trabalho que me está a deixar com umas dúvidas

Tenho de usar a classe canvas e daí inserir uns gráficos, mas tem de existir uma classe geral e depois outras classes (heranças) para funcionar na classe principal.

A minha classe principal é esta

import java.awt.*;
public class JanelaPrincipal  
{
private Objetos jan;
public JanelaPrincipal()
{
	jan = new Objetos("Teste", 600, 500);	  
	jan.setVisible(true);

}

public void Desenhar()
{
   jan.setVisible(true);

   jan.setFundo(Color.blue);

}

a classe objetos

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
* Definição de Objetos.
public class Objetos
{
private JFrame frame;
private JanelaPane g;
private Graphics2D graphic;
private Color backgroundColor;
private Image canvasImage;

public Objetos(String titulo)
 {
	this(titulo, 300, 300, Color.white);	  
}

 public Objetos(String titulo, int largura, int altura)
{
	this(titulo, largura, altura, Color.white);
}

 public Objetos(String titulo, int largura, int altura, Color bgColor)
{
	frame = new JFrame();
	g = new JanelaPane();
	frame.setContentPane(g);
	frame.setTitle(titulo);
	g.setPreferredSize(new Dimension(largura, altura));
	backgroundColor = bgColor;
	frame.pack();
}

  public void setVisible(boolean visible)
{
	if(graphic == null) {
		// first time: instantiate the offscreen image and fill it with
		// the background color
		Dimension size = g.getSize();
		canvasImage = g.createImage(size.width, size.height);
		graphic = (Graphics2D)canvasImage.getGraphics();
		graphic.setColor(backgroundColor);
		graphic.fillRect(0, 0, size.width, size.height);
		graphic.setColor(Color.black);
	}
	frame.setVisible(true);
}
/**
 * Fornece informacao sobre a visibilidade do Canvas
 * @return  true se o Canvas esta visivel, false caso nao esteja
 */
public boolean isVisible()
{
	return frame.isVisible();
}


//Definição de cores e de fundos

public void setFundo(Color nova)
{
   graphic.setColor(nova);

}

public Color getFundo()
{
	return graphic.getColor();
}

public void setCorFundo(Color nova)
{
	backgroundColor = nova;
	graphic.setBackground(nova);
}

public Color getCorFundo()
{
	return backgroundColor;
}


//Fim
private class JanelaPane extends JPanel
{
	public void paint(Graphics g)
	{
		graficos obj = new graficos();
		g.drawImage(canvasImage, 0, 0, null);
	}
}

E a partir daqui duas classes, uma geral (gráficos) e outra para já de linhas (herança)

Classe linhas

import java.awt.*;
public class linhas extends graficos
{
private String nome;
private Color cores;
private int altura;
private int largura;
private int posicaoX;
private int posicaoY;
/**
 * Constructor for objects of class linhas
 */
public void linhas(String nome,Color cores,int altura, int largura, int posicaoX, int posicaoY)
{
	this.nome =nome;
	this.cores=cores;
	this.altura=altura;
	this.largura=largura;
	this.posicaoX=posicaoX;
	this.posicaoY=posicaoY;
}

public void paint(Graphics g)
	{
		g.drawLine(10,10,10,10);
		g.setColor(Color.blue);
	}
}

A minha questão é que não me aparece nada na janela principal quando executo.....(classe principal)

Que me falta??

cumps

gmc11

 

Link to comment
Share on other sites

Tens razão, essa função copiei de um exemplo dele e não está definida.

Mas mesmo assim não dá nada.

Tenho de ter uma classe comum a todos.

Depois tenho de ter subclasses que vão herdar alguns dos campos da classe Gráficos

Neste caso, a classe linha tem de usar os campos nome, cor, posição x e y), dentro desta classe existe um metodo para criar uma linha e depois passa-la para objetos e aparece na janela.

Alguma coisa está a passar-me...n vejo

gmc11

 

Link to comment
Share on other sites

Tens razão, essa função copiei de um exemplo dele e não está definida.

Mas mesmo assim não dá nada.

a função está definida, senão o código nem compilava

Tenho de ter uma classe comum a todos.

Depois tenho de ter subclasses que vão herdar alguns dos campos da classe Gráficos

Neste caso, a classe linha tem de usar os campos nome, cor, posição x e y), dentro desta classe existe um metodo para criar uma linha e depois passa-la para objetos e aparece na janela.

Alguma coisa está a passar-me...n vejo

sem saber como é a classe gráficos é impossivel dizer exactamente com é ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

A classe gáficos é a minha classe geral.

import java.awt.*;
/**
* Write a description of class graficos here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class graficos
{
   // instance variables - replace the example below with your own
   private String nome;
   private Color cores;
   private int altura;
   private int largura;
   /**
 * Constructor objectos da classe graficos
 */
   public void graficos(String nome, Color cores,int altura, int largura)
   {
    // initialise instance variables
    this.nome =nome;
    this.cores =cores;
    this.altura=altura;
    this.largura=largura;  
   }
}

Todos os graficos(linhas, triangulos, rectangulos,etc) usam isso mas depois em cada há há coisas específicas, por exemplo um circulo tem raio e centro.

Tenho de ter a hipotese de usar uma classe e criar um objeto bem como remover esse objeto

gmc11

 

Link to comment
Share on other sites

Não me aparece na mesma.....e em vez de aparecer em branco aparece em cinzento....

1º-

public class linhas extends graficos
{
       public void paint(Graphics g)
               {
                       g.drawLine(10,10,10,10); // desanhas as linhas
                       g.setColor(Color.blue);  // e só depois é que mudas a cor ??
               }

2-

se aparece em cinzento é porque não estás a "desenhar" o background, algo que a função da classe graficos deverá estar a fazer.

o metes esse código ou chamas a função de "paint" da classe mãe

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Ora aí está

Classe main


import java.awt.Color;
/**
* Janela principal de funcionamento do programa.
*
* @gmc
* @0.1
*/

public class JanelaPrincipal
{
private Objetos jan;

public JanelaPrincipal()
{
jan = new Objetos("Trabalho GMC", 600, 500);
jan.setVisible(true);

}

public void Desenhar()
{
jan.setVisible(true);
jan.setFundo(Color.WHITE);

}

}

Classe Objetos


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

/**
* Definição de Objetos.
*
* @gmc
* @0.1
*/
public class Objetos
{
private JFrame frame;
private JanelaPane g;
private Graphics2D graphic;
private Color backgroundColor;
private Image canvasImage;

public Objetos(String titulo)
{
this(titulo, 300, 300, Color.white);
}

public Objetos(String titulo, int largura, int altura)
{
this(titulo, largura, altura, Color.white);
}

public Objetos(String titulo, int largura, int altura, Color bgColor)
{
frame = new JFrame();
g = new JanelaPane();
frame.setContentPane(g);
frame.setTitle(titulo);
g.setPreferredSize(new Dimension(largura, altura));
backgroundColor = bgColor;
frame.pack();
}

public void setVisible(boolean visible)
{
if(graphic == null) {
// first time: instantiate the offscreen image and fill it with
// the background color
Dimension size = g.getSize();
canvasImage = g.createImage(size.width, size.height);
graphic = (Graphics2D)canvasImage.getGraphics();
graphic.setColor(backgroundColor);
graphic.fillRect(0, 0, size.width, size.height);
graphic.setColor(Color.black);
}
frame.setVisible(true);
}

/**
* Fornece informacao sobre a visibilidade do Canvas
* @return true se o Canvas esta visivel, false caso nao esteja
*/
public boolean isVisible()
{
return frame.isVisible();
}


//Definição de cores e de fundos

public void setFundo(Color nova)
{
graphic.setColor(nova);

}

public Color getFundo()
{
return graphic.getColor();
}

public void setCorFundo(Color nova)
{
backgroundColor = nova;
graphic.setBackground(nova);
}

public Color getCorFundo()
{
return backgroundColor;
}


//Fim
private class JanelaPane extends JPanel
{
public void paint(Graphics g)
{
linhas obj = new linhas();
obj.paint(g);

}
}

}

Classe gráficos


import java.awt.*;
/**
* Write a description of class graficos here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class graficos
{
// instance variables - replace the example below with your own
private String nome;
private Color cores;
private int altura;
private int largura;

/**
* Constructor objectos da classe graficos
*/
public void graficos(String nome, Color cores,int altura, int largura)
{
// initialise instance variables
this.nome =nome;
this.cores =cores;
this.altura=altura;
this.largura=largura;
}

}

Por fim Classe linhas


import java.awt.*;
/**
* Write a description of class linhas here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class linhas extends Canvas
{
private String nome;
private Color cores;
private int altura;
private int largura;
private int posicaoX;
private int posicaoY;
/**
* Constructor for objects of class linhas
*/
public void linhas(String nome,Color cores,int altura, int largura, int posicaoX, int posicaoY)
{
this.nome =nome;
this.cores=cores;
this.altura=altura;
this.largura=largura;
this.posicaoX=posicaoX;
this.posicaoY=posicaoY;
}

public void paint(Graphics g)
{
g.setColor(Color.blue);
g.drawLine(10,10,10,10);
}
}

Já estou a ficar cego...lol

[

Edited by Baderous
geshi
gmc11

 

Link to comment
Share on other sites

já vi onde está o problema, bastou criar um exemplo para ver onde é :

package pap.tests;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main
{
   protected class Pane extends JPanel
   {
       private static final long serialVersionUID = 1L;

       public void paint(Graphics g)
       {
           g.setColor(Color.blue);
           g.drawLine(10,10,20,20); // x0,y0 de inicio e x1, y1 de fim (quando tens os mesmos isso é um ponto)
       }
   }

   protected Main()
   {
       Pane pane = new Pane();
       pane.setPreferredSize(new Dimension(200, 200));

       JFrame frame = new JFrame();
       frame.setContentPane(pane);
       frame.setTitle("Titulo");
       frame.pack();

       frame.setVisible(true);
   }

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

ps : e sim, este código faz o que pertendes

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

A questão é que tenho de usar Canvas.

Ponho os objetos (linhas, triangulos, etc) nessa nova classe??

desenvolver um editor gráfico que permita a criação e manutenção de objetos gráficos simples, cuja visualização é efetuada num canvas

Criação de objetos gráficos básicos (linhas, triângulos, quadrados, retângulos, círculos, elipses, e texto com um tipo de letra predefinido). Cada objeto gráfico deverá ter um nome único, pelo qual é identificado, e uma cor. Cada objeto gráfico deverá guardar informação sobre as suas propriedades (ex: um círculo deverá guardar o centro e o raio, para além do nome e da cor; um texto deverá guardar a string a desenhar, a posição, a cor).

Com isso posso fazer?

gmc11

 

Link to comment
Share on other sites

A questão é que tenho de usar Canvas.

não, não tens.

a classe JPanel apareceu para substituir o Canvas em ambientes que usam o Swing (existe vários problemas em misturar o Swing com o AWT)

por outras palavras, usa o JPanel

e se queres manter o nome Canvas :

package pap.tests;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main
{
   protected class Canvas extends JPanel
   {
       private static final long serialVersionUID = 1L;

       public void paint(Graphics g)
       {
           g.setColor(Color.blue);
           g.drawLine(10,10,20,20); // x0,y0 de inicio e x1, y1 de fim (quando tens os mesmos isso é um ponto)
       }
   }

   protected Main()
   {
       Canvas pane = new Canvas();
       pane.setPreferredSize(new Dimension(200, 200));

       JFrame frame = new JFrame();
       frame.setContentPane(pane);
       frame.setTitle("Titulo");
       frame.pack();

       frame.setVisible(true);
   }

   public static void main(String[] args) {
       new Main();
   }
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
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
 Share

×
×
  • 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.