Duvida em pegar atributos

9 respostas
rbroz85

Bom dia… tenho uma duvida…

eu tenho um Jpanel no meu app swing… nesse jpanel… eu adiciono um
novo objeto extendido de jcomponent !
onde eu tenho um desenho !

quando eu defino o tamanho no meu jcomponente… blz…
se eu nao definir … fica 0 , 0 !

entao pergunta…

tem como eu pegar o width e heigh do jpanel no qual eu adicionei o meu jcomponent ?
ou eu tenho que passar ?
[]'s abs

obrigado

9 Respostas

Marky.Vasconcelos

No seu JComponent:

JPanel aondeFuiAdicionado = (JPanel)this.getParent();
//Voce precisa usar o cast para JPanel por que o método getParent retorna um Container
rbroz85

Show de bola, era isso que eu queria !!!
obrigadao !!! Mark

rbroz85

ih funcionou nao !

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at javaapplication3.draw.(draw.java:25)

jPanel7.add(new draw());

em draw() eu quero pegar o tamanho de jPanel7…

naop funfou… e agora?

Marky.Vasconcelos

=/
Comigo eu uso e da certo

Eu faço assim

//no meu panel
	public void centralize() {
		Dimension d = getParent().getSize();
		int x = (d.height / 2) - (getSize().height / 2);
		int y = (d.width / 2) - (getSize().width / 2);
		setLocation(y, x);
	}
@Override
	public void setVisible(boolean aFlag) {
                          if(aFlag)
		centralize();//apenas se for true centralizamos , por que não tem sentido centralizar oque voce não vai ver =/
		super.setVisible(visible);
	}

//no frame
MeuPanel panel = new MeuPanel();
add(panel);
panel.setVisible(true);

PS: São todos nomes ficticios, eu não programo assim ^^

rbroz85

pow que parada hein…

minha class draw :

public class draw extends JComponent{

    private int w;
    private int h;
    private Dimension d = getParent().getSize(); 
    
    public draw() {
         System.out.println(">>"+d.getHeight()+">>"+d.getWidth());
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.draw3DRect(4, 4, 400, 400, true);
        g2d.drawLine(0, 0, 390, 390);
    }
}

no frame eu chamo assim: jPanel7.add(new draw());

e da erro assim:

[color=darkred]Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException[/color]

[color=blue]      at javaapplication3.draw.(draw.java:22)

at javaapplication3.Main.(Main.java:54)

at javaapplication3.Main$6.run(Main.java:473)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

[/color]
Marky.Vasconcelos

rbroz85:
pow que parada hein…

minha class draw :

public class draw extends JComponent{

    private int w;
    private int h;
    private Dimension d = getParent().getSize(); 
    
    public draw() {
         System.out.println(">>"+d.getHeight()+">>"+d.getWidth());
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.draw3DRect(4, 4, 400, 400, true);
        g2d.drawLine(0, 0, 390, 390);
    }
}

no frame eu chamo assim: jPanel7.add(new draw());

e da erro assim:

[color=darkred]Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException[/color]

[color=blue]      at javaapplication3.draw.(draw.java:22)

at javaapplication3.Main.(Main.java:54)

at javaapplication3.Main$6.run(Main.java:473)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

[/color]</blockquote>

Voce esta buscando o tamanho dele na hora de instanciar um draw

imagina voce fazer isso:

draw d = new draw();//Aqui voce tentou pegar o size mas ele não foi adicionado a nada, então NULL
panel.add(d);//Aqui voce adiciona então getParent deve retornar o panel
rbroz85

ah como, vou setar o tamanho do meu componente entao ?

abs

Marky.Vasconcelos
draw d = new draw();
panel.add(d);
d.setSize(panel.getSize());

Não serve?

PS: Já viu sobre convenções de códigos?
Inicie as palavras do nome da classe com letra maiuscula
Exs: Draw
DrawPanel

rbroz85

pois eh… serve ate serve… mas queria saber se tem como fazer logo embutido…

ps: ja vi sim sobre converções de codigos…
eu vi que escrevi errado… mas como era so pra teste… nen liguei… (mas eu nao programo assim) :wink:

Abs brow

Criado 10 de março de 2008
Ultima resposta 10 de mar. de 2008
Respostas 9
Participantes 2