Graphics null

2 respostas
eclipsejava
Douglas1992

Graphics nullo:

Podem me ajudar.

Quero fazer uma aba de menu(Barra)

package Dominio;

import java.awt.Canvas;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JFrame;

public class Aba extends JFrame{

private static Canvas canvas;

public static void main(String[] rags){
    
    JFrame jFrame = new JFrame();        
    jFrame.setExtendedState(MAXIMIZED_BOTH);
    
    getCanvas().setSize(jFrame.getMaximumSize());
    jFrame.add(getCanvas());        
    Graphics g = getCanvas().getGraphics();
    
    //g.setColor(Color.BLUE);
    //g.fillOval(50, 50, 100, 100);    
    //jFrame.setVisible(true);
}
private static Canvas getCanvas(){
    
    if(canvas == null){
        
        canvas = new Canvas();
        
    }
    
    return canvas;
    
}

}

2 Respostas

Lince_potiguara

Eu fiz algumas modificações no seu código e ele funcionou

  1. crie um método que terá toda a lógica de seu código e deixe em main apenas a instância do objeto e o chamado do método, já que não dá para usar nada que não seja static dentro dum método static

  2. Tomei a liberdade de fazer algumas modificações em seu código, ele está comentado, se ainda tiver alguma dúvida é  comentar outra vez
    
    `import java.awt.Canvas;
    
    import java.awt.Color;
    
    import java.awt.Graphics;
    
    import javax.swing.JFrame;
    
    import javax.swing.JPanel;
    

public class AbaMenu{
private Canvas canvas = new Canvas();

//private JFrame frame = new JFrame();
//private Graphics g;

public static void main(String[] ags){
	
	AbaMenu aba = new AbaMenu();
	
	aba.go();
	
}

public void go(){
	JFrame frame = new JFrame();
	Pintor tt = new Pintor();
	
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//encerra o código
	
	frame.add(tt);
	frame.setBackground(Color.DARK_GRAY);
	//frame.setExtendedState(MAXIMIZED_BOTH);
	canvas.setSize(frame.getMaximumSize());

	//jFrame.setVisible(true);
	frame.setSize(400, 400);//configura o tamanho da janela
	frame.setLocation(500, 250);//deixa mais ou menos no meio
	frame.setVisible(true);
}

class Pintor extends JPanel{//precisamos de um JPanel para adicionar em frame, uma classe interna é o ideal.
	public void paintComponent(Graphics g){//é um método a ser extendido, 
		try{
			//adicionei um bloco try/catch/finally para saber se 
			
			g.setColor(Color.BLUE);        //retorna null se não puder ser anexado ao display
			g.fillOval(50, 50, 100, 100);
			
			}catch(Exception ex){
				if (g == null)
					System.out.println("g == null");
			}finally {
				System.out.println("fim do bloco try catch");
			}
	}
	
}

}
`

Lince_potiguara

para usar o método fillOval() não é preciso um canvas, mas eu deixei pelo canvas ser útil

Criado 20 de agosto de 2016
Ultima resposta 20 de ago. de 2016
Respostas 2
Participantes 2