Exemplo:
1 - Classe Fábrica
public class Fabrica {
private int codigoFabrica;
private String nomeFabrica;
/*
* Métodos acessores e modificadores
*/
public void setCodigoFabrica(int codigoFabrica){
this.codigoFabrica = codigoFabrica;
}
public int getCodigoFabrica(){
return codigoFabrica;
}
public void setNomeFabrica(String nomeFabrica){
this.nomeFabrica = nomeFabrica;
}
public String getNomeFabrica(){
return nomeFabrica;
}
}
2 - Classe Modelo
public class Modelo {
private int codigoModelo;
private String nomeModelo;
private Fabrica fabrica;
/*
* Métodos acessores e modificadores
*/
public void setCodigoModelo(int codigoModelo){
this.codigoModelo = codigoModelo;
}
public int getCodigoModelo(){
return codigoModelo;
}
public void setNomeModelo(String nomeModelo){
this.nomeModelo = nomeModelo;
}
public String getNomeModelo(){
return nomeModelo;
}
public void setFabrica(Fabrica fabrica){
this.fabrica = fabrica;
}
public Fabrica getFabrica(){
return fabrica;
}
}
3 - Classe CombEncadeado
import java.awt.BorderLayout;
import java.util.List;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.UIManager;
public class ComboEncadeado extends JFrame {
private List<Fabrica> fabricas = new ArrayList<>();
private List<Modelo> modelos = new ArrayList<>();
private List<Modelo> modelosEncontrados = new ArrayList<>();
public ComboEncadeado(){
setTitle("Combobox Encadeado");
configurarLayout();
retornarFabricas();
retornarModelos();
carregarFabrica();
}
private void configurarLayout(){
setIconImage(new ImageIcon(getClass().getResource("/img/favicon.png")).getImage());
layoutDeBorda = new BorderLayout(5, 5);
setLayout(layoutDeBorda);
cbxFabrica = new JComboBox<>();
cbxModelo = new JComboBox<>();
add(cbxFabrica, BorderLayout.NORTH);
add(cbxModelo, BorderLayout.CENTER);
cbxFabrica.addItemListener(
new java.awt.event.ItemListener(){
public void itemStateChanged(java.awt.event.ItemEvent evento){
cbxFabricaItemStateChanged(evento);
}
}
);
}
private void retornarFabricas(){
//List<Fabrica> fabricas = new ArrayList<>();
Fabrica fabrica1 = new Fabrica();
Fabrica fabrica2 = new Fabrica();
Fabrica fabrica3 = new Fabrica();
fabrica1.setCodigoFabrica(1);
fabrica1.setNomeFabrica("Volkswagen");
fabrica2.setCodigoFabrica(7);
fabrica2.setNomeFabrica("Ford");
fabrica3.setCodigoFabrica(39);
fabrica3.setNomeFabrica("Fiat");
fabricas.add(fabrica1);
fabricas.add(fabrica2);
fabricas.add(fabrica3);
//return fabricas;
}
private void retornarModelos(){
Modelo modelo1 = new Modelo();
Modelo modelo2 = new Modelo();
Modelo modelo3 = new Modelo();
Modelo modelo4 = new Modelo();
Modelo modelo5 = new Modelo();
modelo1.setCodigoModelo(8);
modelo1.setNomeModelo("Fox");
modelo1.setFabrica(fabricas.get(0));
modelo2.setCodigoModelo(1);
modelo2.setNomeModelo("Gol G5");
modelo2.setFabrica(fabricas.get(0));
modelo3.setCodigoModelo(52);
modelo3.setNomeModelo("Uno");
modelo3.setFabrica(fabricas.get(2));
modelo4.setCodigoModelo(2);
modelo4.setNomeModelo("Fusion");
modelo4.setFabrica(fabricas.get(1));
modelo5.setCodigoModelo(14);
modelo5.setNomeModelo("Pálio Weekend");
modelo5.setFabrica(fabricas.get(2));
modelos.add(modelo1);
modelos.add(modelo2);
modelos.add(modelo3);
modelos.add(modelo4);
modelos.add(modelo5);
}
private void carregarFabrica(){
//cbxFabrica.removeAll();
cbxFabrica.addItem("Selecione...");
for(Fabrica fabrica : fabricas)
cbxFabrica.addItem(fabrica.getNomeFabrica());
}
private void carregarModelo(String fabrica){
modelosEncontrados.clear();
for(Modelo modelo : modelos){
if(modelo.getFabrica().getNomeFabrica().equals(fabrica)){
modelosEncontrados.add(modelo);
}
}
popularComboModelo();
}
private void popularComboModelo(){
cbxModelo.removeAllItems();
cbxModelo.addItem("Selecione...");
for(Modelo modelo : modelosEncontrados){
cbxModelo.addItem(modelo.getNomeModelo());
}
}
private void cbxFabricaItemStateChanged(java.awt.event.ItemEvent evento){
carregarModelo(cbxFabrica.getSelectedItem().toString());
}
public static void main(String[] args){
try{
for(UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()){
if("Nimbus".equals(info.getName())){
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}catch(Exception excp){}
ComboEncadeado comboEncadeado = new ComboEncadeado();
comboEncadeado.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
comboEncadeado.setSize(320, 100);
comboEncadeado.setVisible(true);
comboEncadeado.setResizable(false);
comboEncadeado.setLocationRelativeTo(null);
}
private BorderLayout layoutDeBorda;
private JComboBox<String> cbxFabrica;
private JComboBox<String> cbxModelo;
}
4 - Compilo as classes (por meio da classe que tem o método main):
javac -encoding UTF-8 ComboEncadeado.java
5 - Executo:
java ComboEncadeado
6 - Gero o .jar:
6.1 Crio o arquivo de classes (.txt)

6.2 Crio o arquivo de imagens (.txt) - mas pode chamar direto

6.3 Crio o arquivo do Manifesto - eu tinha dito que tinha que seguir o padrão
Created-By: versão jdk (Oracle Corporation), mas não é bem assim, como pode ser visto abaixo:

6.4 Solicito a geração do aquivo JAR

7 - Resultado

Rodando…

Para maiores informações consulte: JAR File Specification.