Dúvida

20 respostas
E

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout);
[color=red]getContentPane().setLayout(layout);[/color]

O que significa esse () no meio?

20 Respostas

Regis_A_Rocha

no meio vc fala no getContentPane()

E

Isso! (:

Regis_A_Rocha

o abre e fecha parenteses sao do metodo getContentPane()

pedroroxd

Toda função do java tem o ()…
Esteja ele vazio ou preenchido…

Como por exemplo

String m = "";
           m.length();
E

Tá. Isso eu sei… O que eu quero saber é por que o método está no meio disso. Parece que um método invoca o outro! :open_mouth:
Qual a explicação sintática?

edmarr

Ficaria parecido com isto .

class Content{
    private Integer cod;
    
// get and setters
   public Integer getCod(){
      return cod;
   }

}

class UseContent{
   private Content content;


   public Content getContent{
      return content;
   }
}

Usando um metodo para envocar outro .

UseContent u = new UseContent();
System.out.println(u.getContent().getCod());
Nicolas_Fernandes

Olá, Exploit!

Bom, vamos tentar ser objetivos.

O método getContentPane() irá retornar um objeto do tipo Container.

Objetos do tipo Container tem o método setLayout() para uso, por isso ele pode ser chamado logo após a definição do método.

Vamos a um exemplo:

public class Usuario {
   private String nome;
   public String getNome() { return this.nome; }
   public void setNome(String nome) { this.nome = nome; }
}

public class UsuarioServices {

   private Usuario usuario;

   public static UsuarioService getInstance() {
      return new UsuarioService();
   }

   private UsuarioServices() {
   
      usuario = new Usuario();
      usuario.setNome("Zé das Couves");
   }

   public class Usuario getUsuario() {

      return this.usuario;
   }
}

Bom, o que fiz ali em cima?
Temos uma classe Usuário. Ela tem seus atributos e seus métodos. É uma classe Pojo (simplificada rs).

Temos também uma classe UsuarioServices. Ela trata de alguns serviços referentes à usuários.

Por que fazer isso:

Usuario usuario = UsuarioServices.getInstance().getUsuario();
String nome = usuario.getNome();

System.out.println(nome.toString());

Sendo que posso fazer:

String nome = UsuarioServices.getInstance().getUsuario().getNome();  // Como o último método invocado (getUsuario()) retorna um objeto Usuario, já posso fazer chamada a métodos dele aqui mesmo.

System.out.println(nome.toString());

Deu pra entender mais ou menos?

[]'s

E

Nicolas Fernandes,

Muito obrigado pela explicação e os exemplos! Eu consegui entender o conceito. Entrentanto, surgiu uma nova dúvida…
O método getContentPane() é um getter, certo? Mas no caso

getContentPane().setLayout(layout);

ele não retorna pra nenhum objeto. Por quê?

edmarr

Sim ele eh um Get , ele Retorna um tipo de objeto ContentPane com isto vc pode manipular o objeto seguinte pois vc ja te a referencia dele .

E

Hum… Se eu entendi bem, parece que o método getContentPane() traz como retorno um objeto cujo é reaproveitado para invocar o método setLayout(layout). Isso tudo na mesma linha.
Legal, acho que a idéia principal é ter um objeto (vindo do get) só para poder invocar um outro método set, o qual é exclusivo desse mesmo objeto. Me corrijam se estiver enganado.

Java tem muitas variações para se fazer uma mesma coisa… Aiai, coitado do programador de C ):

edmarr

Relx … .Vem vindo ao mundo Java =) . :lol:

E

Já que eu abri um tópico de dúvida. Gostaria de abusar mais um pouquinho da boa vontade de vocês e pedir uma explicação do uso desse this:

private JPanel JPDesign; JPDesign = new DrawingPane(); JPDesign.setBackground(Color.white); JPDesign.addMouseListener(this);
Ele faz refêrencia a quem afinal? Um objeto externo a JPanel, um atributo interno? Qual?!

Nicolas_Fernandes

this é uma palavra reservada que faz referência à classe em questão.

Deve ser uma clase JFrame, JDialog ou algo do tipo.

Sempre que você quiser fazer referência a uma classe, um método ou atributo da mesma, use o this.
Uma prática legal essa. ^^

public class Usuario {

   private String nome;

   public string setNome(String nome) {
      this.nome = nome;
   }

Em cima, há um exemplo claro do uso do this. A variável nome da classe em questão recebe a variável por parâmetro nome.

Entendido?

[]'s

E

Nicolas Fernandes,

Esse seu exemplo eu entendo. Só que realmente fiquei sem entender aquele this... Vou tentar mostra mais um pouco do código pra ver se alguém me ajuda : ) Ai vai:
public class Main extends javax.swing.JFrame implements MouseListener {
    private JPanel JPDesign;

    /** The component inside the scroll pane. */
    public class DrawingPane extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
        }
    }

    /** Creates new form Paint */
    public Main() {
        JPDesign = new DrawingPane();
        JPDesign.setBackground(Color.white);
        JPDesign.addMouseListener(this);

        initComponents();
    }
    ...
}
Antecipadamente agradeço a atenção!

[]s.

ctdaa

Olá.
Neste seu exemplo… um programa principal cria a instância da classe Main… tipo :

...
  Main teste = new Main();
  ...

neste momento o construtor é executado e vai acionar um método “JPDesign.addMouseListener(this);” passando como parâmetro o próprio objeto instanciado do Main que acabou de ser criado…
Ficou claro agora?

edmarr

this , significa a referencia do objeto em uso corrente.

ViniGodoy

O método addMouseListener pede que você passe a ele um objeto, que implemente a interface mouseListener.

Agora, olha para a declaração de sua própria classe. Você viu que você disse que seu Main “implements mouseListener”?

Então, a forma de chamar um método addMouseListener passando “você mesmo” como parâmetro é através do this.

//Eu mesmo quero ouvir o evento de mouse de JPDesign. JPDesign.addMouseListener(this);

Essa é a forma de dizer no construtor da classe Main, que o objeto que escutará o evento é o mesmo que está sendo construído.

ViniGodoy

No C também é possível fazer algo similar. Basta que numa função você retorne o ponteiro para outra função. É bizarro, eu sei, mas igualmente possível:

typedef float(*pt2Func)(float x) floatfunc;
 
floatfuncp someFunc(int x) {
   return outraFuncao;
}

//mais tarde
someFunc(10)(20.f);
criador

Então, este this esta fazendo referência a sua classe.

E

Valeu gente. Já entendi (:

Criado 30 de setembro de 2009
Ultima resposta 1 de out. de 2009
Respostas 20
Participantes 8