Como acessar jComboBox de outra classe?

Pessoal, tenho uma classe chamada “Principal.java” onde tenho a parte gráfica da aplicação, ou seja, as telas com as tabelas e os combobox. Esta classe tem um jComboBoxTeste que está dentro de um jPanelTeste o qual está dentro de um jFrame. Gostaria de saber como faço para acessar o valor deste jComboBox a partir de outra classe?

Pensei algo como jFrame.jPanelTeste.jComboBox.get… mas não deu certo e não tenho ideia se fiz algo absurdo ou apenas errado.

Agradeço a atenção e fico no aguardo.

Uma forma bem simples é fazer com que a classe que tem o combo exponha um método mais ou menos assim:

public JComboBox getMyComboBox() {
    return myComboBox;
}
...
private JComboBox myComboBox; // esse é o combo que você queria acessar a partir da outra classe

Só que você precisa alterar a classe. Sem alterar, nada feito.

O que você poderia fazer é ter um getComboBox() simples retornando seu combo:

[code]private JComboBox meuComboBox;

public JComboBox getMeuComboBox() {
return meuComboBox;
}

E na sua outra classe:

public class ClasseChamaCombo {
JComboBox novoComboBox = principal.getMeuComboBox();
}[/code]

Não poderia?

Até mais!

O nosso amigo entanglement já tinha colocado uma solução escrevia!
:wink:

Pessoal, entendi o que disseram, mas tem um detalhe que não entendi ou não consegui fazer. Seguinte, eu usei o NetBeans pra montar as telas e os componentes dela, logo saberiam me dizer onde e como colocaria esse método para retornar o jComboBox que preciso pegar o valor posteriormente? E como acessaria o mesmo?

Eu tentei colocar o método na classe “Principal.java” assim:

[code]public class Principal() {…

jComboBoxTrimestre = new javax.swing.JComboBox();

jComboBoxTrimestre.setModel(new javax.swing.DefaultComboBoxModel(new String[] { “Selecione um trimestre”, “1º Trimestre”, “2º Trimestre”, “3º Trimestre” }));

public JComboBox getComboBoxTrimestre() {
return jComboBoxTrimestre;
}[/code]
Daí na minha outra classe eu fiz assim:

Principal p = new Principal(); jComboBox c = p.get............ //não apareceu nada como getComboBoxTrimestre()

Imagino que eu deva ter errado em algum momento, talvez pelo fato do mesmo estar dentro de um jPanel que está dentro de um jFrame.

Obrigado e fico no aguardo.

Então Robertdm, na verdade seria o contrário:

Na sua classe, onte tem suas telas é que você colocaria o método getComboBox() retornando o combo da sua tela:

[code]public class TelaComSwing {
//componentes do Swing, como botoes, labels, tables, etc…
JComboBox comboDaSuaTela;

public JComboBox getComboBox() {
return comboDaSuaTela;
}
}[/code]

E na sua classe principal:

[code]
public class Principal {
//seus codigos
JComboBox comboDaSuaClassePrincipal;

comboDaSuaClassePrincipal = new TelaComSwing.getComboBox();
//e usa o combo da forma que precisar
}[/code]

Seria isso?

Abraços!

Cara, seguinte, minha classe chamada “Principal.java” tem toda a parte de telas: jFrame, jComboBox, jTable, etc…tudo está nesta classe entende? Se me perguntar pq não sei te responder, mas é que usei o NetBeans pra montar as telas pq não conhecia swing. Uma coisa que pelo que vi é ruim, é que o NetBeans “bloqueia” vários códigos entende?

O que eu fiz pra colocar o método getComboBox foi selecionar o combobox que eu quero o valor, daí cliquei com o botão direito e escolhi para personalizar código e daí ficou assim:

[code]public class Principal() {…

jComboBoxTrimestre = new javax.swing.JComboBox();

jComboBoxTrimestre.setModel(new javax.swing.DefaultComboBoxModel(new String[] { “Selecione um trimestre”, “1º Trimestre”, “2º Trimestre”, “3º Trimestre” }));

public JComboBox getComboBoxTrimestre() { //aqui que coloquei o método que me falou
return jComboBoxTrimestre;
} [/code]
Depois disso em uma outra classe, tentei acessar aquele combobox fazendo isso:

[code]public class Teste {…

JComboBox comboDaSuaClassePrincipal;

comboDaSuaClassePrincipal = new Principal.getComboBoxTrimestre();
…}
[/code]

Mas para mim não aparece o getComboBoxTrimestre entende?

Cara, eu entendi a ideia, mas não to conseguindo fazer, se puder me ajudar ainda agradeço.

Sò um detalhe, pelo que vi o meu jComboBoxTrimestre está “em cima” de um jPanel sendo que este jPanel está “em cima” de um jFrame. Não será por isso que não consigo acessar?

Pensei que talvez tivesse que acessar por exemplo, Principal.jFrame.jPanel.jComboBoxTrimestre… faz algum sentido?

Fico no aguardo, obrigado por enquanto.

Certinho!

Fiz um exemplo aqui e consegui normal:
Fiz o seguinte:

[code]
public class NewJFrame extends javax.swing.JFrame {

/** Creates new form NewJFrame */
public NewJFrame() {
    initComponents();  //você deve ter este método na sua tela, imagino
}

public JComboBox getCombo() {
   return jComboBox1;
}

}[/code]

E o Netbeans gerou este código de teste:

Então criei uma classe de Teste:

[code]
public class Teste {

public static void main(String[] args) {
NewJFrame frame = new NewJFrame();
JComboBox combo = frame.getCombo();
System.out.println(combo.getModel().getSelectedItem());
}

}[/code]

E imprimir o objeto retornado pelo getModel().getSelectedItem();
que imprimiu Item 1 que é o Item selecionado por default.

A sua aplicação segue mais ou menos essa idéia?

Abraços!

Geralmente você não passa o objeto da interface em si (o combo), mas valores. Eis um exemplo funcional:
http://www.guj.com.br/posts/list/55710.java#292687

Ele mostra ida e a volta dados entre duas janelas.

[quote]AlexandreGama
JavaTeenager[/quote]

Segue exatamente essa ideia…Vou tentar de novo aqui, pode ser um pequeno detalhe que não estou conseguindo ver.

Agradeço a ajuda.

Grande abraço.

Cara, olhei o material que indicou. Entendi a ideia de passar apenas os valores.

Valeu pela dica.

Grande Abraço.

Legal Robertdm. Pode ser algum detalhe mesmo.

Só retornei a instância do combo pra você ver que consigo enxergar os itens.
De qualquer forma, seguindo a linha que o Vinny comentou, não se deve passar
os objetos do Swing diretamente.

Neste caso tem até alguns padrões arquiteturais que você pode estudar caso tenha curiosidade,
como MVC ou MVP que, a grosso modo, separa as suas regras de negócio da visualização de forma bem elegante,
facilitando inclusive o seu TDD.
Fica como curiosidade. :wink:

Abraços!

Vou dar uma estudada sim nos padrões estruturais, já ouvi falar nos mesmos.

Cara, só tenho a agradecer aí pela ajuda e pelas dicas, valeu.

Abração.