Programa que não funciona no Eclipse, ajude-me

8 respostas
fabricioff

Caros, o pequeno codigo abaixo quando executado via terminal funciona numa boa, mas se executar ele pelo eclipse ele abre a janela mas nao faz o drawLine, será que alguem sabe me dizer por que?

import java.awt.;
import javax.swing.
;

public class HelloWordSwing
{

public void paint (Graphics g)
{
               g.drawLine(100,100,200,200);	
}


public static void main(String[] args) {
	
 	JFrame area=new JFrame();
 	area.setSize(600,400);
	area.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            ara.setVisible(true);
}

}

8 Respostas

ViniGodoy

Na verdade, eu não saberia dizer porque via terminal ele pinta a linha.

O drawline não é executado simplesmente porque não é chamado!

Deh

Porque não tenta assim:

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

public class HelloWordSwing extends JFrame
{


public void paint (Graphics g)
{
g.drawLine(100,100,200,200);
}


public static void main(String[] args) {

HelloWordSwing area=new HelloWordSwing();
area.setSize(600,400);
area.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
area.setVisible(true);
}

}

Você tem que "extends" JFrame, sobreescrever o método Paint. Criar uma instância de sua classe, mandar exibir e pronto =]

ViniGodoy

Tente da seguinte maneira:

import java.awt.*;

import javax.swing.*;

public class HelloWorldSwing {
    public static void main(String[] args) {
        JFrame area = new JFrame();
        area.setSize(600, 400);
        area.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        area.setContentPane(new AreaPanel());
        area.setVisible(true);
    }
    
    private static class AreaPanel extends JPanel {               
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawLine(100, 100, 200, 200);
        }
    }
}

Observação, sempre que postar códigos use a tag code. Para mais informações sobre esse e outros recursos do GUJ, veja:
http://www.guj.com.br/posts/list/50115.java

Lembrando sempre que você não deve sobrescrever paint diretamente, e sim, paintComponent. O método paint é dividido em três etapas.

  1. PaintComponent: Pinta o componente em si;
  2. PaintBorder: Pinta uma borda em torno do componente;
  3. PaintChildren: Chama os métodos de pintura que dos objetos que estão sobre o componente.

Como a sua intenção é aprender Swing, a maneira mais correta de fazer uma pintura seria através de um panel, que fica definido com contentPane de seu Frame. Isso também dá independência da parte de pintura em relação a janela utilizada (fica muito fácil transportar esse painel para um Applet, JInternalPane ou JDialog).

fabricioff

Acho que meu eclipse ta maluco de vez, os dois exemplos de vcs abrem somente uma tela cinza, mas nao mostra a linha.

ViniGodoy

Muito estranho, esse programa eu testei e funcionou.

Testa com esse aqui:
http://www.guj.com.br/posts/list/0/53658.java#282079

Não custa nada conferir a versão do seu JDK também…

Deh

ah, alias mals ae
eu não entendo muito de swing, lembro de ter visto um exemplo em algum lugar que usava o “paint”…

Mas é estranho não ter funcionado… testei pelo terminal e pelo Eclipse, e funcionou… como o ViniGodoy disse, confira o seu jdk…

ViniGodoy

Eu achei a sun meio infeliz.

Tudo começou na AWT, onde todos deviam sobrescrever paint.

Depois, veio o Swing. Vida nova, mundo novo. Ao invés de deixarem o método paint para fazer as vias do paintComponent e chamar o atual paint de outra coisa (como paintComplete), pediram para que programadores esquecessem que o método paint e fossem para paintComponent.

Isso é uma tragédia. Se você comprar um livros mais atualizados sobre construção de componentes, verá que a recomendação é sempre sobrescrever paintComponent.

Entretanto, sobrescrevendo paint também funciona. Mas você terá um comportamento problemático se o usuário tentar colocar objetos sobre o seu componente, ou se ele tentar usar uma das classes de “border”.

ViniGodoy

Uma prova disso está nesse tutorial da Sun:
http://java.sun.com/docs/books/tutorial/uiswing/painting/practice.html

Dá uma olhada qual método ele sugere que seja sobrescrito…

Criado 1 de março de 2007
Ultima resposta 2 de mar. de 2007
Respostas 8
Participantes 3