alphasil Posted December 10, 2012 at 03:26 PM Report #486444 Posted December 10, 2012 at 03:26 PM 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
HappyHippyHippo Posted December 10, 2012 at 03:42 PM Report #486447 Posted December 10, 2012 at 03:42 PM talvez um main ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted December 10, 2012 at 04:09 PM Author Report #486451 Posted December 10, 2012 at 04:09 PM Oi HHH Tá tdo? Um main? como assim?? gmc11
Primordius Posted December 10, 2012 at 04:14 PM Report #486454 Posted December 10, 2012 at 04:14 PM Sim um main, o java tem que ter um main para executar, nem que dentro dela tenha, JanelaPrincipal j = new JanelaPrincipal(); j.Desenhar();
alphasil Posted December 10, 2012 at 04:23 PM Author Report #486455 Posted December 10, 2012 at 04:23 PM Isso é feito no BlueJ, não pede main, o prof mandou um exemplo, as classes que tenho é Demo e é Canvas. gmc11
HappyHippyHippo Posted December 10, 2012 at 04:29 PM Report #486456 Posted December 10, 2012 at 04:29 PM private class JanelaPane extends JPanel { public void paint(Graphics g) { graficos obj = new graficos(); g.drawImage(canvasImage, 0, 0, null); // <--- onde está esta função ? } } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted December 10, 2012 at 04:43 PM Author Report #486457 Posted December 10, 2012 at 04:43 PM 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
HappyHippyHippo Posted December 10, 2012 at 04:56 PM Report #486459 Posted December 10, 2012 at 04:56 PM 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 Portugol Plus
alphasil Posted December 10, 2012 at 05:02 PM Author Report #486460 Posted December 10, 2012 at 05:02 PM 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
HappyHippyHippo Posted December 10, 2012 at 05:05 PM Report #486462 Posted December 10, 2012 at 05:05 PM o que tens de fazer é private class JanelaPane extends JPanel { public void paint(Graphics g) { linhas obj = new linhas(); // objecto onde está definido o código de desenho das linhas obj.paint(g); // chamar o código de desenho das linhas } } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted December 10, 2012 at 06:49 PM Author Report #486477 Posted December 10, 2012 at 06:49 PM Não me aparece na mesma.....e em vez de aparecer em branco aparece em cinzento.... gmc11
HappyHippyHippo Posted December 10, 2012 at 07:15 PM Report #486490 Posted December 10, 2012 at 07:15 PM 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 Portugol Plus
alphasil Posted December 10, 2012 at 08:08 PM Author Report #486504 Posted December 10, 2012 at 08:08 PM Oi HHH Não me dá mesmo assim, dizes pôr a função paint na classe gráficos?? gmc11
HappyHippyHippo Posted December 10, 2012 at 10:39 PM Report #486514 Posted December 10, 2012 at 10:39 PM coloca o código que tens agora IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted December 10, 2012 at 10:45 PM Author Report #486519 Posted December 10, 2012 at 10:45 PM (edited) 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 December 11, 2012 at 12:48 AM by Baderous geshi gmc11
HappyHippyHippo Posted December 11, 2012 at 10:14 AM Report #486559 Posted December 11, 2012 at 10:14 AM (edited) 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 December 11, 2012 at 10:15 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted December 11, 2012 at 10:45 AM Author Report #486565 Posted December 11, 2012 at 10:45 AM Oi HHH Bom dia, isso encaixa no código da janelaPrincipal? Eu não chegava lá. gmc11
HappyHippyHippo Posted December 11, 2012 at 10:50 AM Report #486569 Posted December 11, 2012 at 10:50 AM isto não encaixa em lado nenhum !!! é um exemplo a única coisa que tens de alterar são as coordenadas da linha que estás a fazer IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted December 11, 2012 at 12:25 PM Author Report #486589 Posted December 11, 2012 at 12:25 PM 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
HappyHippyHippo Posted December 11, 2012 at 03:21 PM Report #486639 Posted December 11, 2012 at 03:21 PM 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 Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now